AtCoder Regular Contest 148 D – mod M Game
鲁莽的尝试?
一个非常显然的 Bob 的必胜局面是:对于任意 x∈{0,1,⋯,M−1},在这 2N 个数中的出现次数均为偶数。由此 Bob 可以选择与 Alice 上一轮选的相同的数而获胜。
那……其他局面就一定是 Alice 必胜么?
我们只依靠该结论交一份代码。不出意料,没有通过。不过它只错了两成的测点!看来大体方向是正确的。
正解
Bob 必胜的必要条件之一是:存在将给定的 2N 个数分成两部分,每部分均包含 N 个数,且有两部分的和在 modM 意义下相同的方案。
对于任何 M,N=1 的情况都是平凡的。从 N=2 入手。令 Alice 首次选择的数为 y,Bob 在此前提下的最优解为选择 b。令在某种可能的最优方案中,二者随后选择了 z,c。则必然有
b+c≡y+z(modM)b+z≡y+c(modM)(1)(2)
这是因为 Alice 是先手,其目标是不让 Bob 顺利取完符合要求的划分集合。于是 Alice 取 z,c 中的任意一个,最终剩余的数都可使得 Bob 的集合与之构成同余。由 (1)+(2),(1)−(2) 分别得到:
c−z2c≡z−c≡2z(modM)(modM)c+2b+z2b≡c+2y+z≡2y(modM)(modM)
当 2∣M 时,存在 2 的逆元,故而等式两侧同时乘 2−1 得到 y≡b,z≡c。若 2∣M,则每个方程均有两类解:b≡y+2M∨b≡y(modM),z,c 亦然。由于 y 不确定,则对于任意 y 以及其剩余集合构成的 z,c,均能够让 Bob 构造满足上述条件。
考虑 N=3 的情况。令前两轮 Alice, Bob 分别取 x,a。则取完前两轮后问题递降为 N=2 之情况。则对于任意初始的 x,仍应当存在 2a≡2x(modM),以此类推。
那么我们可以得到如下策略:当 Alice 取 x,Bob 可以取满足 2x≡2a(modM) 的任意 a。可以发现,假设在这两轮之前有 Alice 的和 S= Bob 的和 T。如果 Bob 取 a=x,则仍有 S≡T;(在 2∣M 时)否则若 a≡x+2M(modM),则当之后存在任意两轮,Alice 取 y 而 Bob 取 b=y+2M(modM),必然使得 a+b≡x+y(modM),有 S’≡T’。否则没有别的满足上述方程的解,Bob 必败。
(假如对于 N=2 的情况,有不满足 y≡b,z≡c 的方程 y+z≡b+c(modM)(i)。令 y≡b+Δ⟺z≡c−Δ(modM),则 Alice 只要取 y,c,逼迫 Bob 取 z,b,就会使得 Bob 的必胜条件变成 y+z+Δ≡b+c−Δ(modM)(ii),当且仅当 2∣M,Δ=2M 时,(i),(ii) 才能同时成立。)
同时我们还注意到,Bob 选取 a=x+2M(modM) 时,必须能够与之后的某两轮配对。这就意味着若 2∣M,让 x 与 x+2M(modM) 两两配对,配对总数应当为偶数,方有 Bob 必胜。当 2∣M 时必然只能有 x 的出现次数为偶才有解。
利用 std::map
统计即可。时间复杂度 O(nlogn)。
Submission #34806024
1 Response
[…] AtCoder ARC 148 D – mod M Game 题解与思路重现 […]