zoukankan      html  css  js  c++  java
  • 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");
    	}
    }
    


  • 相关阅读:
    如何通过Restful API的方式读取SAP Commerce Cloud的Product图片
    Permute Digits
    Browser
    Jamie and Alarm Snooze
    Perfect Squares
    Color the ball
    Stars
    1086. Tree Traversals Again (25)
    1085. Perfect Sequence (25)
    1083. List Grades (25)
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5349943.html
Copyright © 2011-2022 走看看