题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1847
题意:中文题
解析:还是一样从必败态往前推
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1005;
int a[maxn];
int win[maxn];
int main(void)
{
int n;
while(~scanf("%d",&n))
{
memset(win,0,sizeof(win));
int cnt = 0,tmp = 1;
while(tmp<=n)
{
a[cnt++] = tmp;
tmp *= 2;
}
for(int i=1;i<=n;i++)
{
for(int j=0;j<cnt;j++)
{
if(a[j]<=i)
win[i] |= !win[i-a[j]];
}
}
if(win[n])
puts("Kiki");
else
puts("Cici");
}
return 0;
}