AT_arc217_d [ARC217D] Greedy Customer

题目描述

给定正整数 $N, M$,还有一个长度为 $N$ 的正整数序列 $A = (A_1, A_2, \ldots, A_N)$。 对于正整数 $k$,定义 $f(k)$ 为如下过程的答案: > 高桥有 $k$ 日元。AtCoder 商店有 $N$ 件商品,第 $i$ 件商品的价格为 $A_i$ 日元。 > > 他依次对 $i=1,2,\ldots,N$ 执行以下操作。 > > - 如果他当前持有的金额不小于 $A_i$ 日元,他就购买第 $i$ 件商品,并支付 $A_i$ 日元。 > > 求他购买到的商品的总价格。 请计算 $\displaystyle \bigoplus_{1\le k\le M} (k\times f(k))$。这里,$\displaystyle \bigoplus_{1\le k\le M} (k\times f(k))$ 表示 $1\times f(1), 2\times f(2), \ldots, M\times f(M)$ 的按位异或(bitwise XOR)。 有 $T$ 组测试数据,请分别输出答案。 什么是按位异或?对于非负整数 $A$ 和 $B$,$A \oplus B$ 的定义如下: - 若 $A$ 和 $B$ 的二进制表达下,某一位只有一个为 $1$,则 $A \oplus B$ 的该位为 $1$;否则为 $0$。 例如,$3 \oplus 5 = 6$(用二进制表示为:$011 \oplus 101 = 110$)。 一般来说,$k$ 个非负整数 $p_1, p_2, \ldots, p_k$ 的按位异或为 $(\ldots ((p_1 \oplus p_2) \oplus p_3) \oplus \ldots \oplus p_k)$,且可以证明异或顺序不影响结果。

输入格式

输入按以下格式给出: > $T$ > $\text{case}_1$ > $\text{case}_2$ > $\vdots$ > $\text{case}_T$ 每组测试数据格式如下: > $N$ $M$ > $A_1$ $A_2$ $\ldots$ $A_N$

输出格式

按输入顺序为每组测试数据输出答案,每个答案一行。

说明/提示

### 样例解释 1 考虑第一组测试数据。 例如,当高桥初始金额为 $3$ 日元时,其操作如下: - $i=1$ 时:手中有 $3$ 日元,不少于 $2$ 日元,购入第 1 件商品。 - $i=2$ 时:剩余 $1$ 日元,少于 $3$ 日元,无法购买第 2 件商品。 - $i=3$ 时:剩余 $1$ 日元,不少于 $1$ 日元,购入第 3 件商品。 由此可得 $f(3)=2+1=3$。 各 $f(1),f(2),f(3),f(4),f(5),f(6)$ 分别为 $1,2,3,3,5,6$。 所以答案为 $1,4,9,12,25,36$ 的按位异或,结果是 $61$。 ### 数据范围 - $1\le T \le 10$ - $1\le N, M$ - 所有测试数据中 $N$ 的总和不超过 $5\times 10^5$ - 所有测试数据中 $M$ 的总和不超过 $5\times 10^7$ - $1\le A_i \le M$ - 所有输入均为整数。 由 ChatGPT 5 翻译