题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1847
题目大意:
有N张牌,两个人轮流抓,每次抓的牌数只能是2的幂次(2^0、2^1、2^2、…)。最后抓完牌的人获胜。
Kiki和Cici都是足够聪明的学生,Kiki先抓,输出赢得比赛的人。
思路:
找必败点,很容易知道当N==3时是一个必败点,因为只能取1或是2,而剩下的牌肯定能被对手取完,
所以3是一个必败点。4能取1把场面变为3,所以4是必胜点,5能取2把场面变为3。而6的话,要么取
完剩下2的幂次让对手赢,或者留下机会让对手把场面变为3(必败点)。同理3的倍数一样,不能一次性
把牌取完,最后要么自己取完剩下2的幂次让对手赢,要么让对手把场面变为3和3的倍数(必败局)。那
么,答案就是如果是3的倍数,则后手赢,否则一定是先手赢。
AC代码:
#include<iostream> #include<algorithm> using namespace std; int main() { int N; while(cin >>N) { if(N%3!=0) cout << "Kiki" << endl; else cout << "Cici" << endl; } return 0; }
HDU1847 Good Luck in CET-4 Everybody!【博弈】
原文:http://blog.csdn.net/lianai911/article/details/45276467