题目传送门:
http://acm.hdu.edu.cn/showproblem.php?pid=1847
模板题、
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
const int MAXN=1005;
using namespace std;
int sg[MAXN];
int vis[MAXN];
int a[MAXN];
int num;
int getsg(int b)
{
if(sg[b]!=-1)
return sg[b];//搜索过了
if(b<a[0])//无解的情况
{
sg[b]=0;
return 0;
}
bool vis[100];
memset(vis,0,sizeof(vis));
// set<int>s;
for(int j=0;j<num;j++)
{
if(a[j]<=b)
{
int c=getsg(b-a[j]);
vis[c]=1;
}
}
int ans=0;
while(vis[ans]!=0)
{
ans++;
}
sg[b]=ans;
return sg[b];
}
int main (void)
{
int n;
while(~scanf("%d",&n))
{
memset(sg,-1,sizeof(sg));
num=0;
int c=1;
int i=0;
while(c<=n)
{
a[i]=c;
c*=2;
i++;
num++;
}
int re=getsg(n);
if(re!=0)
{
printf("Kiki\n");
}
else
{
printf("Cici\n");
}
}
return 0;
}