luogu P4101 [HEOI2014] 人人尽说江南好
废话不说,直接证明。
首先,对于给定的 \(n,m\), 所需要的操作次数是固定的。先讨论 \(n\le m\) 的情况。这时显然最终会合并为一堆,操作次数则为 \(n-1\)。这很好证明。假设有一堆石子为 \(x\) 个的石子堆,那这堆石子堆一定由 \(x\) 堆原始石子堆合并成的(原始时每堆石子堆都只有一个石子),每次合并时都会减少一堆,那只要操作 \(x-1\) 次就会只剩一堆,而总数有 \(x\) 个石子,所以这堆一定有 \(x\) 个石子,即一开始假设的石子堆。
当 \(n > m\) 时,最终应只剩 \(n/m+[n \% m!=0]\) 堆,操作次数也要减少为 \((n-1)-(n/m)+(!(n\%m))\),必胜的一方总有方法达到这样的最终局面。必胜一方决策应如下:
可以保证场上只有石子数为 \(1\) 和 \(m\) 的石子堆和 \(x\)。
称最大的一堆且尚未有 \(m\) 个石子的一堆为 \(x\)。
-
若对方将 \(x\) 与其他一堆合并,我方也将 \(x\) 与其他一堆合并。
-
若对方将另外两堆合并,我方就将 \(x\) 与对方新合并的一堆合并。若无法合并,说明 \(x\) 有 \(m-1\) 个石子(对方新合并的一堆最多只有 \(2\) 个),随便与只有一个石子的石子堆即可,下一步将最大的两堆合并。
这样可以保证场上只有石子数为 \(1\) 和 \(m\) 的石子堆和 \(x\)。
结论证毕,代码自己来(

浙公网安备 33010602011771号