标签:891 游戏 Nim 必败 int 异或 ans AcWing
看了很多的博客,终于对Nim游戏中的异或操作有些认识。。。
首先对于Nim游戏,需要明确两点,一点是如果剩下全是0,则是必败态。一点是如果有两个完全相同的状态,则它们合起来的状态是一个必胜态,即后手能完全模仿先手在对称的堆中进行操作。这就可以通过异或来操作
对于本题最简单的Nim游戏,只要最后的异或和为0就一定是必败态,因为我们看每一位上1的个数都是偶数位,因此我们只要对某个数中的1进行操作了,后手就能作出操作使所有数的异或和再次变成0,使先手总是保持必败的状态。
因此在本题中,只要异或和不为0就是必胜态,只要异或和为0就是必败态。
1 #include "bits/stdc++.h" 2 using namespace std; 3 int n,ans,t; 4 int main(){ 5 int i,j;ans=0; 6 scanf("%d",&t); 7 while (t--){ 8 scanf("%d",&n); 9 ans^=n; 10 } 11 if (ans) printf("Yes\n"); 12 else printf("No\n"); 13 return 0; 14 }
标签:891,游戏,Nim,必败,int,异或,ans,AcWing 来源: https://www.cnblogs.com/keximeiruguo/p/16508414.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。