思路:
sg函数表示的状态转移。模板题,跟以前做的一样,有不懂的请看我以前写的别的题,或者去找找相关的资料。
AC代码:
#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
int dp[1010];
int sg(int n){
if(dp[n] != -1)return dp[n];
if(n == 0) return 0;
int k = 1;
int has[12];
memset(has,-1,sizeof(has));
for(int i = 0;;i++){
if(k <= n){
has[sg(n-k)]++;
}
else
break;
k <<= 1;
}
for(int i = 0;i < 12;i++){
if(has[i] == -1)
return dp[n] = i;
}
return 2333333333333333;
}
int main()
{
int n;
memset(dp,-1,sizeof(dp));
while(~scanf("%d",&n)){
if(sg(n))
puts("Kiki");
else
puts("Cici");
}
return 0;
}