1.题目链接。题目的大意和Bash博弈类似,但是有一点不同,就是取得数量不再是1-m了。而是2的k次幂。实际上是一样的,为什么呢?首先如果作为先手,我们考虑自己的必败态:那就是如果物品的数量是3的倍数的时候是必败的,假设n是三的倍数,第一次取之后即使不是3的倍数,后手可以通过一定的策略将每个回合减少的物品成为3的倍数,为什么是这样的,这是可以证明的,有兴趣的自己证明一下:思路就是对于一个2的s次方,一定可以找到2的t次方他们两个加起来是3的倍数,证明的过程会使用到二项式定理。其实也很简单的。
那么既然知道了这个结论,这个问题就完全转化为Bash博弈了。下面是实现的代码:
#include<iostream>
#pragma warning(disable:4996)
using namespace std;
int main()
{
int n;
while (~scanf("%d", &n))
{
if (n % 3 == 0)
{
printf("Cici\n");
}
else
{
printf("Kiki\n");
}
}
}