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\)

  1. 若对方将 \(x\) 与其他一堆合并,我方也将 \(x\) 与其他一堆合并。

  2. 若对方将另外两堆合并,我方就将 \(x\) 与对方新合并的一堆合并。若无法合并,说明 \(x\)\(m-1\) 个石子(对方新合并的一堆最多只有 \(2\) 个),随便与只有一个石子的石子堆即可,下一步将最大的两堆合并。

这样可以保证场上只有石子数为 \(1\)\(m\) 的石子堆和 \(x\)

结论证毕,代码自己来(

posted @ 2024-09-24 11:20  wmtl_lofty  阅读(36)  评论(0)    收藏  举报