一堆物品n个,最多取m个,最少取1个,最后取走的人获胜
分析:只要保证取玩最后剩m+1个,则必定胜利,所以构造m+1,只要n是 m+1的倍数,则先手必败,每次先手取玩,后手可取使得剩下的仍然是m+1的倍数,直到最后,剩下m+1个
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7439 Accepted Submission(s): 4786
分析:只要最后剩3个,那么必将后手胜利,推广到3的倍数,如果是3的倍数,先手取玩之后,后手保证剩下的是3的倍数必将后手胜利
1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <algorithm> 5 6 using namespace std; 7 8 int main() 9 { 10 int n; 11 while(scanf("%d",&n)!=EOF) 12 { 13 if(n % 3 == 0) 14 { 15 printf("Cici\n"); 16 } 17 else 18 { 19 printf("Kiki\n"); 20 } 21 } 22 return 0; 23 }
HD1847 Good Luck in CET-4 Everybody!(巴什博弈)
原文:http://www.cnblogs.com/zhaopAC/p/5184185.html