其他分享
首页 > 其他分享> > CF1162E Thanos Nim

CF1162E Thanos Nim

作者:互联网

CF1162E Thanos Nim

Problem - 1162E - Codeforces

大概是一篇迟到了13个月的题解?

第二次做到了这道题,上一次做到的时候还刚刚入门,啥也不懂,听学长讲的题解更是听不明白。今天又一次幸运的遇到了这道题,终于可以靠着自己的思考稍微讲一讲自己的思路了。

大致题意

​ 有\(n\)堆石子,每一次Alice和Bob需要选择\(\frac{n}{2}\)堆石子,分别移除任意多个,谁先无法进行操作则被认为输掉游戏

解题思路

​ 经过思考可以得到一个显然的结论:谁先使石子堆数减少,那么他必然会输掉游戏。原因简单,假设减少后的石子堆数为\(t\),\(t < n\),对方将任意\(\frac{n}{2}\)堆移完,那么剩下\(t - \frac{n}{2} < \frac{n}{2}\),无法继续操作。

得到这一点后,我们继续思考,什么时候我们不得不完全移除一堆石子?

​ 我们先考虑比较简单的情况,一堆石子里面只有1,和一些大于1的数(如果都大于1,显然可以继续操作直到出现这种情况)

​ 当剩下的 个数不为1的石子堆数 小于一半时,我们无论怎么选择,都需要选择一堆个数为1的石子,将其移除,然后输掉游戏。否则的话,我们就可以选择那些个数不为1的石子,将它们的个数变为1,这样操作以后,个数不为1的石子数量必然小于一半,对方必输(原因同上)。

​ 从只包含1与其他数的情况往更大的数的情况推广,如果只包含2和其他数。当剩下的 个数不为2的石子堆数 小于一半时,我们必须选择一堆2将其变成1,同时我们注意到,这样操作完后,我们的剩下不为1的堆数大于一半,就是我们上一段讨论过的情形,是对方的必胜态,即我们必败太。反之同理,个数不为2的石子堆数 大与一半时,我们把他们都变成2,对方必输。

​ 以此类推,我们可以发现一条公共的规律,对于所有数量中最小的数,如果他的出现次数大于\(\frac{n}{2}\),则先手胜利,否则后手胜利。于是这道题就做完了。


​ 这个博弈思路还有一种理解方式就是可以理解为“不要先让最小值减小”,但是写的时候想了很久这个思路该怎么证明他和必胜策略的关联性,最终感觉想的有点乱于是作罢,就我自己而言,感觉还是从简单情况推广比较好理解。

​ 其实并不是很擅长博弈类的题目,所以讲的可能并不是很严谨,如果有错误敬请指出。

标签:堆数,frac,Nim,CF1162E,石子,个数,Thanos,我们,不为
来源: https://www.cnblogs.com/iceyz/p/16219017.html