bzoj_1022: [SHOI2008]小约翰的游戏John
Nim游戏 改成了 拿到最后一个输,所以要躲着拿
get到了新技能:(S为所有堆数异或值)
1.堆数不全是1时
S>0,你可以控制当前这个局面,(因为一定有一个堆数ai>S,你可以取ai-S个石子,使其异或和==0)
否则S==0,你就会被对手控制
2.堆数全是1
显然,此时你面临 奇数堆,必输
特判即可
#include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> #include <iostream> #define ll long long #define mem(a,b) memset(a,b,sizeof(a)) using namespace std; int T; int n; int a[56]; int main(){ scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1;i<=n;++i) scanf("%d",&a[i]); int s=0,flag=0; for(int i=1;i<=n;++i) { s^=a[i]; if(a[i]>1) flag=1; } if(!flag) { if(s) printf("Brother\n"); else printf("John\n"); } else { if(s) printf("John\n"); else printf("Brother\n"); } } }