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");
    	}
    }
    


  • 相关阅读:
    5.2基础标签学习
    6.15ajax选房子
    6.15ajax写数据库的增删改查
    [Ext JS 4] 实战之Grid, Tree Gird 添加按钮列
    DOM4J 读取XML配置文件进行数据库连接
    Bit Map解析
    图像像素操作
    九度OJ 1025 最大报销额(01背包)
    MYSQL :逗号分隔串表,分解成竖表
    interrupt & storage & DMA
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5349943.html
Copyright © 2011-2022 走看看