标签:
原题链接:点击此处
思路:还是博弈论,可以参考前一篇的博客。
我在看了尼姆博奕之后才明白前一个博客也可以使用异或和的方法判断奇异局势,因为奇异局势的亦或和为0。
因此若当前面对的不是奇异局势,那么我只要令c-a+b即可。故若当c<a+b,那这个可就不能变,那么可以考虑a<c+b....
(异或的规矩是,写出二进制码,如果相同则变为0,不同变为1)
源代码:
#include <iostream> #include <stdio.h> #include<cstring> using namespace std; int a[200]; int main() { int sum; int n,tmp; while(~scanf("%d",&n),n) { sum=0; memset(a,0,sizeof(a)); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) { tmp=0; for(int j=1;j<=n;j++) { if(i==j) continue; else tmp^=a[j]; } if(tmp<a[i])//使非奇异局势变为奇异局势的方法有多少 sum++; } printf("%d\n",sum); } return 0; }
HUD 1850 Being a Good Boy in Spring Festival
标签:
原文地址:http://www.cnblogs.com/gdvxfgv/p/5744268.html