标签:lang beginning 复杂 printf 胜利 long game play amp
Description
Input
Output
Sample Input
2 45 45 3 3 6 9
Sample Output
No Yes
Nim博弈裸题,所有堆的值异或得0则先手输,否则先手赢。
Nim博弈及异或理解可看百度百科
这游戏看上去有点复杂,先从简单情况开始研究吧。如果轮到你的时候,只剩下一堆石子,那么此时的必胜策略肯定是把这堆石子全部拿完一颗也不给对手剩,然后对手就输了。
如果剩下两堆不相等的石子,必胜策略是通过取多的一堆的石子将两堆石子变得相等,以后如果对手在某一堆里拿若干颗,你就可以在另一堆中拿同样多的颗数,直至胜利。
如果你面对的是两堆相等的石子,那么此时你是没有任何必胜策略的,反而对手可以遵循上面的策略保证必胜。如果是三堆石子……
如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
1 #include<iostream> 2 #include<cstdio> 3 #include<queue> 4 #include<vector> 5 #include<cstring> 6 #include<string> 7 #include<algorithm> 8 using namespace std; 9 10 11 int main() 12 { 13 int n; 14 long long tmp,res; 15 while(~scanf("%d",&n)) 16 { 17 scanf("%lld",&res); 18 for(int i=1;i<n;i++) 19 { 20 scanf("%lld",&tmp); 21 res ^=tmp; 22 } 23 if(res==0) 24 printf("No\n"); 25 else 26 printf("Yes\n"); 27 } 28 return 0; 29 }
POJ 2234 Matches Game(Nim博弈裸题)
标签:lang beginning 复杂 printf 胜利 long game play amp
原文地址:http://www.cnblogs.com/Annetree/p/7181892.html