CF竞赛题目讲解_CF850C(博弈论 + SG函数 + 状态压缩)
2022-11-14 14:55 作者:Clayton_Zhou | 我要投稿
AC代码
https://codeforces.com/contest/850/submission/180923520
题意:
轮到玩家时,他选择一个数字p^k(其中p是质数,k是正整数),这样p^k至少可以除掉列表中的一个数字。
对于列表中可被p^k整除的每个数字,称其为x,玩家将删除x并添加到列表中。
不能有效选择p和k的玩家会输。
题解:
博弈 + SG函数 + 状态压缩
先考虑所有数字都是2的倍数的情况,可以很显然的发现如果只有两个2,这样仍然是先手必胜,
显然这样并不是一个nim游戏,因为可以一下子“把两堆石子取走”,
故而同时有多个2^k 和只有一个2^k 的情况是相同的。
一个2和一个16的情况下, 可以考虑 2^(1-1)|2^(4-1)=9
对于其他质数因子,也可以类似考虑。
对于每个质数因子,分别计算其SG函数值, 再异或运算。