题意
有 nnn 堆石子,每堆石子的数量在 [l,r][l,r][l,r] 之间,有 mmm 个特殊的数 SiS_iSi,两个人轮流取石子,每次可以在一堆石子中取走 xxx 个石子,满足 μx=1 or x∈S\mu_x=1~or~ x\in Sμx=1 or x∈S。求后手必胜的方案数。
其中,1≤n≤106,1≤l≤r≤105,1≤m≤51\le n\le 10^6,1\le l\le r\le 10^5,1\le m\le 51≤n≤106,1≤l≤r≤105,1≤m≤5。
分析
经过出题人的打表,每个数的 sgsgsg 值不超过 230230230。
因此,考虑用 bitsetbitsetbitset 优化求 sgsgsg 函数。
令 opt={
x∣μx=1 or x∈S}opt=\{x|\mu_x=1~or~ x\in S\}opt={
x∣μx=1 or x∈S}。再开 230230230 个 bitsetbitsetbitset,其中 bi,jb_{i,j}bi,j

该博客介绍了如何解决一个两人轮流取石子的游戏问题,其中后手有必胜策略。通过分析,发现每个数的sg值不超过230,采用bitset优化求sg函数,并利用FWT(快速傅里叶变换)数组来计算异或和,从而在限定时间内找到获胜策略。总的时间复杂度是O(wM2+n×256)。
最低0.47元/天 解锁文章
264

被折叠的 条评论
为什么被折叠?



