传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1847
题目大意:中文题目不解释
分析:
根据必胜点和必败点的定义就可以很好地做掉这个题了。做个必胜点和必败点的标记就行了。没有标记过的点为必败点,从必败点一步到达的点都标记为必胜点。
代码
#include <iostream>
using namespace std;
int a[10]={1,2,4,8,16,32,64,128,256,512};
int main()
{
int f[1005]={1,1,1},i,j,n;
for(i=3;i<1001;i++)
{
if(!f[i])
for(j=0;j<10 && i+a[j]<1001;j++)
f[i+a[j]] = 1;
}
while(cin >> n)
if(f[n])
cout << "Kiki" << endl;
else
cout << "Cici" << endl;
return 0;
}