【YBT2022寒假Day7 B】格子染色(博弈论)(分类讨论)(找规律打表)
格子染色
题目链接:YBT2022寒假Day7 B
题目大意
有一个长度为 n 的纸条,然后有 k 种颜色,一些位置一开始已经染色颜色,保证相邻颜色不相同。
两人轮流操作,选一个一个未染色的地方染色,保证不能出现相邻位置颜色相同,谁无法操作谁就输了。
然后问你先手是否必胜。
思路
考虑对于 分类讨论。
首先如果 ,那答案十分显然,肯定无论怎么搞格子都会被填满(一个点旁边顶多两个点),所以答案的 SG 函数就是还没有没填的格子数 的结果。
然后我们考虑把每个数分割出的位置分别处理,答案异或起来。
然后先是稍微简单的 ,那这个我们要分情况讨论:
两边都没有数填,只有一边有数填了,两边都有数填了。
那有什么放的方法呢?
要么是放在最边边,要么是放在中间。
然后我们再看这三种情况:
两边都有数:我们可以推出 SG 函数在旁边两个相同时是 ,不同时是 。
然后这里推一下,在长度为 的时候显然,然后看两种放的方法:
放在最边边,那两边颜色是否相同改变,然后是换到下一个人,所以没问题。
放在中间,分割成两个部分:如果原来颜色一样,那分割之后要么两个一样,要么两个都不一样,以后起来都是 。如果颜色不一样,那分割之后肯定是一个一样一个不一样,以后起来还是 。
然后就证好了。
有一边有这个时候可以证 SG 值就是区间的长度 。
我们考虑在每个位置 都试一下(我们假定左边没有数),那再分类:
如果填的颜色跟右边的一样,那就是 ,包含了 。
如果不一样,那就是 ,然后会有 。
所以全部求 的结果就是 。
然后就是都没有限制:
考虑在位置 放会变成两个一边的,就是 。
显然这个东西只有可能在 是偶数的时候才会有 的结果。
然后因为只有这一个大区间,所以我们不用判断 是奇数的时候它是什么,直接判断就好了。
然后是最神奇的 。
考虑 DP,设 为一个长度为 的区间的 SG 函数。
然后也是两种选法,可以得出一个 的 DP:
然后发现这个似乎不太能优化了,于是我们考虑打标。
然后就会发现从第 项开始出现了一个周期为 的循环。
然后就可以只求前 位了。
(反正我是不是很懂这是怎么想到,怎么看出来的了)
代码
__EOF__

本文链接:https://www.cnblogs.com/Sakura-TJH/p/YBT2022Day7_B.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现