AtCoder ARC148D – mod M Game 题解与思路重现

AtCoder Regular Contest 148 D – mod M Game

鲁莽的尝试?

一个非常显然的 Bob 的必胜局面是:对于任意 x{0,1,,M1}x\in \{0,1,\cdots,M-1\},在这 2N2N 个数中的出现次数均为偶数。由此 Bob 可以选择与 Alice 上一轮选的相同的数而获胜。

那……其他局面就一定是 Alice 必胜么?

我们只依靠该结论交一份代码。不出意料,没有通过。不过它只错了两成的测点!看来大体方向是正确的。

正解

Bob 必胜的必要条件之一是:存在将给定的 2N2N 个数分成两部分,每部分均包含 NN 个数,且有两部分的和在 modM\bmod M 意义下相同的方案。

对于任何 MMN=1N=1 的情况都是平凡的。从 N=2N=2 入手。令 Alice 首次选择的数为 yy,Bob 在此前提下的最优解为选择 bb。令在某种可能的最优方案中,二者随后选择了 z,cz,c。则必然有 b+cy+z(modM)(1)b+zy+c(modM)(2)\begin{aligned} &b+c\equiv y+z\pmod M&(1)\\ &b+z\equiv y+c\pmod M&(2) \end{aligned}

这是因为 Alice 是先手,其目标是不让 Bob 顺利取完符合要求的划分集合。于是 Alice 取 z,cz, c 中的任意一个,最终剩余的数都可使得 Bob 的集合与之构成同余。由 (1)+(2),(1)(2)(1)+(2),(1)-(2) 分别得到: czzc(modM)c+2b+zc+2y+z(modM)2c2z(modM)2b2y(modM)\begin{aligned} c-z&\equiv z-c&\pmod M&&c+2b+z&\equiv c+2y+z&\pmod M\\ 2c&\equiv 2z&\pmod M&&2b&\equiv 2y&\pmod M \end{aligned}

2∤M2\not\mid M 时,存在 22 的逆元,故而等式两侧同时乘 212^{-1} 得到 yb,zcy\equiv b,z\equiv c2M2\mid M,则每个方程均有两类解:by+M2by(modM)b\equiv y+\frac{M}{2} \lor b\equiv y\pmod Mz,cz,c 亦然。由于 yy 不确定,则对于任意 yy 以及其剩余集合构成的 z,cz,c,均能够让 Bob 构造满足上述条件。

考虑 N=3N=3 的情况。令前两轮 Alice, Bob 分别取 x,ax, a。则取完前两轮后问题递降为 N=2N=2 之情况。则对于任意初始的 xx,仍应当存在 2a2x(modM)2a\equiv 2x\pmod M,以此类推。

那么我们可以得到如下策略:当 Alice 取 xx,Bob 可以取满足 2x2a(modM)2x\equiv 2a\pmod M 的任意 aa。可以发现,假设在这两轮之前有 Alice 的和 S=S= Bob 的和 TT。如果 Bob 取 a=xa=x,则仍有 STS\equiv T;(在 2M2\mid M 时)否则若 ax+M2(modM)a\equiv x+\frac{M}{2} \pmod M则当之后存在任意两轮,Alice 取 yy 而 Bob 取 b=y+M2(modM)b=y+\frac{M}{2}\pmod M,必然使得 a+bx+y(modM)a+b\equiv x+y\pmod M,有 STS’\equiv T’。否则没有别的满足上述方程的解,Bob 必败。

(假如对于 N=2N=2 的情况,有不满足 yb,zcy\equiv b, z\equiv c 的方程 y+zb+c(modM)(i)y+z\equiv b+c\pmod M\quad\text{(i)}。令 yb+Δ    zcΔ(modM)y\equiv b+\Delta\iff z\equiv c-\Delta\pmod M,则 Alice 只要取 y,cy, c,逼迫 Bob 取 z,bz, b,就会使得 Bob 的必胜条件变成 y+z+Δb+cΔ(modM)(ii)y+z+\Delta\equiv b+c-\Delta\pmod M\quad\text{(ii)},当且仅当 2M,Δ=M22\mid M,\Delta=\frac{M}{2} 时,(i),(ii)\text{(i),(ii)} 才能同时成立。)

同时我们还注意到,Bob 选取 a=x+M2(modM)a=x+\frac{M}{2}\pmod M 时,必须能够与之后的某两轮配对。这就意味着若 2M2\mid M,让 xxx+M2(modM)x+\frac{M}{2}\pmod M 两两配对,配对总数应当为偶数,方有 Bob 必胜。当 2∤M2\not\mid M 时必然只能有 xx 的出现次数为偶才有解。

利用 std::map 统计即可。时间复杂度 O(nlogn)\operatorname{O}(n\log n)

Submission #34806024

  • 2022年9月12日