[机房测试]速战速决

Description

给定一个序列 \(a_i\)\(i\in[0,n)\)。两个人 \(A\)\(B\) 玩游戏,每次 \(A\) 可以生成一个序列 \(b_i\),然后 \(B\) 选择一个数 \(x\),使 \(a_i\) 加上 \(b_{(i+x)\bmod n}\)。如果所有的 \(a_i\) 都是一个质数 \(p\) 的倍数,游戏结束。

Solution

所有 \(a\) 的运算在\(\bmod p\) 意义下进行,下标运算在 \(\bmod n\) 意义下进行。

博弈论正难则反,先考虑终止情况。先考虑 0 轮就结束的情况,那就是全都是 0。若第一轮就结束,那就是所有 \(a_i\) 都相同。那第二轮就结束呢?那就是无论怎么加都会转移到第一轮就结束的情况。列出式子,就是说

\[\forall i,j\in[0,n-1], a_i+b_j=a_{i+1}+b_{j+1} \]

一观察,发现就是说 \(a\) 的一阶差分要全部相等。一归纳,就发现,在 \(n\) 轮结束的充分必要条件就是 \(a\)\(n\) 阶差分序列全为 \(0\)。那就得到一个 \(O(n^2)\) 的做法,直接做差分,直到为 \(0\)

因为运算在模 \(p\) 意义下进行。这里有一个高阶差分的技巧。考虑一种 \(p^s\) 阶差分的式子

\[\Delta^{p^s} a_i=\sum_{k=0}^{p^s} (-1)^k \binom{p^s}{k} a_{i-k} \]

因为 \(\forall k\in(0,p^s)\)\(\binom{p^s}{k}\equiv 0 \pmod p\),可以考虑 Lucas 展开证明。式子就变成了

\[\Delta^{p^s} a_i=a_i-a_{i-p^s} \]

(中间的减号:当 \(p>2\) 时,\((-1)^{p^s}=-1\);当 \(p=2\),加减号无所谓,只与奇偶性有关)

这样就可以考虑 \(p\) 进制倍增。复杂度 \(O(n\log_p n)\)

posted @ 2021-08-31 10:16  Kreap  阅读(31)  评论(0编辑  收藏  举报