首先0的时候肯定是先手必败态,而必败态一定可以转化为必胜态,所以对于还剩i个的时候。找到他的后继状态是否有必败态,有一个它就是必胜态,没有一个就是必败态。
#include<cstdio>
#include<cstring>
#define maxl 1010
int n;
int a[maxl],ans[maxl];
bool ok[maxl];
void prework()
{
ans[0]=0;
for(int i=1;i<=10;i++)
a[i]=1<<(i-1);
for(int i=1;i<=1000;i++)
for(int j=1;j<=10;j++)
if(a[j]<=i)
ans[i]|=!ans[i-a[j]];
}
int main()
{
prework();
while(~scanf("%d",&n))
{
if(ans[n])
printf("Kiki\n");
else
printf("Cici\n");
}
return 0;
}