$$ \def\xor{\text{ xor }} \def\mex{\mathrm{mex}} \def\SG{\mathrm{SG}} $$
题目描述
小 A 是一个名副其实的狂热的回合制游戏玩家。在获得了许多回合制游戏的世界级奖项之后,小 A 有一天突然想起了他小时候在江南玩过的一个回合制游戏。
游戏的规则是这样的,首先给定一个数 $F$,然后游戏系统会产生 $T$ 组游戏。每一组游戏包含 $N$ 堆石子,小 A 和他的对手轮流操作。每次操作时,操作者先选定一个不小于 $2$ 的正整数 $M$($M$ 是操作者自行选定的,而且每次操作时可不一样),然后将任意一堆数量不小于 $F$ 的石子分成 $M$ 堆,并且满足这 $M$ 堆石子中石子数最多的一堆至多比石子数最少的一堆多 $1$(即分的尽量平均,事实上按照这样的分石子万法,选定 $M$ 和一堆石子后,它分出来的状态是固定的)。当一个玩家不能操作的时候,也就是当每一堆石子的数量都严格小于 $F$ 时,他就输掉。补充:先手从 $N$ 堆石子中选择一堆数量不小于 $F$ 的石子分成 $M$ 堆后,此时共有 $N+M-1$ 堆石子,接下来小 A 从这 $N+M-1$ 堆石子中选择一堆数量不小于 $F$ 的石子,依此类推。
小 A 从小就是个有风度的男生,他邀请他的对手作为先手。小 A 现在想要知道,面对给定的一组游戏,而且他的对手也和他一样聪明绝顶的话,究竟谁能够获得胜利?
输入格式
输入第一行包含两个正整数 $T$ 和 $F$,分别表示游戏组数与给定的数。
接下来 $T$ 行,每行第一个数 $N$ 表示该组游戏初始状态下有多少堆石子。之后 $N$ 个正整数,表示这 $N$ 堆石子分别有多少个。
输出格式
输出一行,包含 $T$ 个用空格隔开的 $0$ 或 $1$ 的数,其中 $0$ 代表此时小 A(后手)会胜利,而 $1$ 代表小 A 的对手(先手)会胜利。
输入输出样例 #1
输入 #1
1 |
|
输出 #1
1 |
|
说明/提示
对于 $100%$ 的数据,$T \lt 100$,$N \lt 100$,$F \lt 100000$,每堆石子数量${}\lt 100000$。
以上所有数均为正整数。
题解
若一堆石子有 $x$ 个,分成 $m$ 堆后,必然有 $x \mod m$ 堆是 $\lfloor \frac{x}{m} \rfloor$ 个,有 $m - x \mod m$ 堆是 $\lfloor \frac{x}{m} \rfloor + 1$ 个。这些堆的 SG 函数的异或和就是 $\SG(x)$。该算法时间复杂度为 $O(n^2)$。
考虑到偶数个相同的数的异或和为 0,因此只要考虑 $x \mod m$ 和 $m - x \mod m$ 的奇偶性即可。
对于某些不同的 $m$,有 $\lfloor \frac{x}{m} \rfloor$ 的值相同,使用整除分块可以对上述方案进行优化。
接下来是打表找规律。当 $x = 5$ 时,对于不同的 $m$,列出分堆后的石子堆:
1 |
|
发现其中大小为 1 的石子堆数总是奇数个。
推论:分堆后某一个数目的石子堆数的奇偶性是一定的。可以分类证明。
- 若 $\lfloor \frac{x}{m} \rfloor$ 为奇数,则 $m - x \mod m = m \times (1 + \lfloor \frac{x}{m} \rfloor) - x$。其中 $1 + \lfloor \frac{x}{m} \rfloor$ 为偶数,则 $m \times (1 + \lfloor \frac{x}{m} \rfloor)$ 也为偶数,原式奇偶性与 $m$ 无关。
- 若 $\lfloor \frac{x}{m} \rfloor$ 为偶数,则 $x \mod m = x - m \times \lfloor \frac{x}{m} \rfloor$。其中 $\lfloor \frac{x}{m} \rfloor$ 为偶数,则 $m \times \lfloor \frac{x}{m} \rfloor$ 也为偶数,原式奇偶性与 $m$ 无关。
按照 $\lfloor \frac{x}{m} \rfloor$ 分块后,块内分出的石子数的两种取值的个数的奇偶性的组合只有两种。例如 $x=9,m=5$ 时,1 的个数总是为奇数,2 的个数为奇数或偶数。
块内只需算出这两种不同的 SG 异或和即可。