SP8624 SP8624 NY10B - Nim-B Sum
题目描述
注意:这个问题与选址建污水处理厂、铺设输电线或建设风力发电场毫无关系。NIM 是一个回文字。
$\operatorname{Nim}$ 游戏可以用任意数量的堆,每堆有任意数量的物品来玩。每一轮,玩家从一堆中拿走一个或多个(最多拿走所有)物品。在标准形式的游戏中,拿走最后一个物品的玩家获胜。对于这个游戏,有一个基于尼姆和($\operatorname{Nim-2}$ 和)的著名策略。
两个非负整数 $X$ 和 $Y$ 的 $\operatorname{Nim-B}$ 和(以 $B$ 为基数的 $\operatorname{Nim}$ 和)(记作 $\operatorname{NimSum}(B, X, Y)$)的计算方法如下:
将 $X$ 和 $Y$ 分别用 $B$ 进制表示。
$\operatorname{Nim-B}$ 和运算结果中 $B$ 进制的每一位都是 $X$ 和 $Y$ 的 $B$ 进制表示中对应位之和对 $B$ 取模的结果。例如:
$\operatorname{NimSum}(2, 123, 456) = 1111011 \oplus 111001000 = 110110011 = 435$
$\operatorname{NimSum}(3, 123, 456) = 11120 \oplus 121220 = 102010 = 300$。
$\operatorname{NimSum}(4, 123, 456) = 1323 \oplus 13020 = 10303 = 307$
对于标准形式的尼姆博弈,策略是计算所有堆大小的 $\operatorname{Nim-2}$ 和 $T$。如果在任何时候,轮到你时 $T = 0$,那么你肯定能赢。任何对手的行动都会使 $T$ 不为 $0$,而且总存在一种行动能将 $T$ 再次变为 $0$。这可以通过计算每堆的 $\operatorname{NimSum}(2, T, PS)$ 来实现;如果这个值小于堆的大小 ($PS$),则计算
$PS$ 与 $\operatorname{Nim-2}$ 和的差值,并从该堆中移除这个差值作为你的下一步行动。
编写一个程序来计算 $\operatorname{NimSum}(B, X, Y)$。
输入格式
输入的第一行包含一个整数 $P\left(1 \le P \le 1000\right)$,表示接下来的数据点数。每个数据集为一行,包含数据点编号,后跟一个空格,再后跟三个用空格分隔的十进制整数 $B$,$X$ 和 $Y$。$2 \le B, X, Y \le 2000000$。
输出格式
对于每个数据点,输出一行。该行包含数据点编号,后跟一个空格,再后跟 $N$,即 $X$ 和 $Y$ 在基数 $B$ 下的 $\operatorname{Nim}$ 和的十进制表示。
说明/提示
对于所有数据,$2 \le B, X, Y \le 2000000$。