典型的集合尼姆博弈,而且这里只有一张图,遍历出边进行mex求sg值
int n, m;
int fg[1010];
int op[11] = { 0,1,2,4,8,16,32,64,128,256,512 };
int sg(int x)
{
if (fg[x] != -1)return fg[x];
unordered_set<int> s;
f(i, 1, 10)//拓展出边
if (x - op[i] >= 0)s.insert(sg(x - op[i]));
for (int i = 0;;++i)
if (!s.count(i))return fg[x] = i;
}
int main()
{
memset(fg, -1, sizeof fg);
while (cin >> n)
{
if (sg(n)!=0)puts("Kiki");
else puts("Cici");
}
return 0;
}