1 /*******************************************************
 2 题目:     Good Luck in CET-4 Everybody!(hdu 1847)
 3 链接:     http://acm.hdu.edu.cn/showproblem.php?pid=1847
 4 算法:     博弈(SG函数)
 5 算法思想: SG(x)=mex{SG(y)|y是x的后继},y就是x能通过一步
 6            变换得到的。mex就是SG(y)中没有出现的最小的非
 7            负整数。最后只要判断SG(x)是否为零。
 8 ********************************************************/
 9 #include<cstdio>
10 #include<cstring>
11 #include<algorithm>
12 #include<iostream>
13 using namespace std;
14 
15 const int mx=1005;
16 int a[20];
17 int sg[mx];
18 int vs[mx];
19 
20 void getsg()
21 {
22     for (int i=1;i<=1000;i++)
23     {
24         memset(vs,0,sizeof(vs));
25         for (int j=0;j<10&&i>=a[j];j++) vs[sg[i-a[j]]]=1; ///i-a[j]为i的后继
26         for (int j=0;;j++)
27         {
28             if (!vs[j])  ///mex中最小没有出现的数
29             {
30                 sg[i]=j;
31                 break;
32             }
33         }
34     }
35 }
36 
37 int main()
38 {
39     for (int i=0;i<10;i++) a[i]=(1<<i);
40     getsg();
41     int n;
42     while (~scanf("%d",&n))
43     {
44         if (sg[n]) printf("Kiki\n");
45         else printf("Cici\n");
46     }
47 }

 

posted on 2016-07-27 11:08  pb2016  阅读(236)  评论(0编辑  收藏  举报