BZOJ 1022 SHOI2008 小约翰的游戏John 博弈论
Posted yxwkaifa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ 1022 SHOI2008 小约翰的游戏John 博弈论相关的知识,希望对你有一定的参考价值。
题目大意:反Nim游戏,即取走最后一个的人输
首先状态1:假设全部的堆都是1,那么堆数为偶先手必胜,否则先手必败
然后状态2:假设有两个堆数量同样且不为1,那么后手拥有控场能力,即:
若先手拿走一堆,那么后手能够选择将还有一堆留下1个或者全拿走,使这两堆终于仅仅剩1个或0个;
若先手将一堆拿剩一个,那么后手能够选择将还有一堆留下一个让先手拿或全拿走,使这两堆终于仅仅剩1个或0个;
若先手将一堆拿走一部分。那么后手能够将还有一堆相同拿走一部分,然后同上
状态3:若Xor!=0 那么先手能够先拿走一部分让Xor=0 然后同状态2先手必胜 否则先手必败
※鉴于本人过于沙茶,以上内容仅存在參考价值。无法证明正确性,欢迎指正
于是若全部堆全是1 Xor==0先手必胜 否则后手必胜
若有堆不是1 Xor==0后手必胜 否则先手必胜
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n; bool Calculate() { int i,x,xor_sum=0; bool flag=1; cin>>n; for(i=1;i<=n;i++) { scanf("%d",&x); if(x^1) flag=0; xor_sum^=x; } if(flag) return !xor_sum; else return xor_sum; } int main() { int T,i; for(cin>>T;T;T--) { if( Calculate() ) puts("John"); else puts("Brother"); } }
以上是关于BZOJ 1022 SHOI2008 小约翰的游戏John 博弈论的主要内容,如果未能解决你的问题,请参考以下文章
[Bzoj1022][SHOI2008]小约翰的游戏John(博弈论)
bzoj 1022: [SHOI2008]小约翰的游戏John
bzoj 1022 [SHOI2008]小约翰的游戏John - anti Nim