笨方法打了sg值表,A了之后把Sg值打印出来一看,发现自己NC了,sg值只有0 ,1,2..................
code:
#include <map> #include <cstring> #include <iostream> #include <cstdio> #include <algorithm> using namespace std; int sg[1001]; int num[]={10,1,2,4,8,16,32,64,128,256,512}; bool hash[1001]; void init() { int i,j; memset(sg,0,sizeof(sg)); sg[0]=0; for(i=1;i<=1000;i++) { memset(hash,0,sizeof(hash)); for(j=1;j<=num[0];j++) { if(i<num[j]) break; hash[sg[i-num[j]]]=1; } for(j=0;j<=1000;j++) { if(!hash[j]) { sg[i]=j; break; } } } } int main() { init(); // for(int i=0;i<=20;i++) // printf("i:%d sg:%d\n",i,sg[i]); int n; while(cin>>n) { if(!sg[n]) cout<<"Cici"<<endl; else cout<<"Kiki"<<endl; } return 0; }