zoukankan      html  css  js  c++  java
  • HDU 1907:John(尼姆博弈变形)

    John

    Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
    Total Submission(s): 6017    Accepted Submission(s): 3499

    Problem Description

    Little John is playing very funny game with his younger brother. There is one big box filled with M&Ms of different colors. At first John has to eat several M&Ms of the same color. Then his opponent has to make a turn. And so on. Please note that each player has to eat at least one M&M during his turn. If John (or his brother) will eat the last M&M from the box he will be considered as a looser and he will have to buy a new candy box.
    Both of players are using optimal game strategy. John starts first always. You will be given information about M&Ms and your task is to determine a winner of such a beautiful game.

    Input

    The first line of input will contain a single integer T – the number of test cases. Next T pairs of lines will describe tests in a following format. The first line of each test will contain an integer N – the amount of different M&M colors in a box. Next line will contain N integers Ai, separated by spaces – amount of M&Ms of i-th color.

    Constraints:
    1 <= T <= 474,
    1 <= N <= 47,
    1 <= Ai <= 4747

    Output

    Output T lines each of them containing information about game winner. Print “John” if John will win the game or “Brother” in other case.

    Sample Input

    2

    3

    3 5 1

    1

    1

    Sample Output

    John

    Brother

    题意

    两个人取n堆石子,每个人至少去一个,最多把一堆石子取完,取到最后一个石子的人失败

    思路

    先手胜的情况:

    1. n堆石子全部都只有一个石子,且n堆石子的异或值为0
    2. n堆石子不全是一个石子,且异或值不为0

    证明:

    1. 若所有堆石子数都为1且SG值为0,则共有偶数堆石子,故先手胜。
    2. 只有一堆石子数大于1时,我们总可以对该堆石子操作,使操作后石子堆数为奇数且所有堆得石子数均为1
    3. 有超过一堆石子数大于1时,先手将SG值变为0即可,且总还存在某堆石子数大于1

    思路来自:http://hzwer.com/1950.html

    AC代码

    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    #include <algorithm>
    #include <math.h>
    #include <limits.h>
    #include <map>
    #include <stack>
    #include <queue>
    #include <vector>
    #include <set>
    #include <string>
    #define ll long long
    #define ull unsigned long long
    #define ms(a) memset(a,0,sizeof(a))
    #define pi acos(-1.0)
    #define INF 0x7f7f7f7f
    #define lson o<<1
    #define rson o<<1|1
    const double E=exp(1);
    const int maxn=1e6+10;
    const int mod=1e9+7;
    using namespace std;
    int main(int argc, char const *argv[])
    {
    	ios::sync_with_stdio(false);
    	int t;
    	int n;
    	int x;
    	cin>>t;
    	while(t--)
    	{
    		cin>>n;
    		int sum=0;
    		int res=0;
    		while(n--)
    		{
    			cin>>x;
    			sum^=x;
    			if(x>1)
    				res++;
    		}
    		if(!res)
    		{
    			if(!sum)
    				cout<<"John"<<endl;
    			else
    				cout<<"Brother"<<endl;
    		}
    		else
    		{
    			if(!sum)
    				cout<<"Brother"<<endl;
    			else
    				cout<<"John"<<endl;
    
    		}
    	}
    	return 0;
    }
  • 相关阅读:
    网鼎杯_2018 _Web_fakebook
    CISCN 2019-ikun
    流浪者-CTF
    wtf.sh-150
    bug-ctf
    EasyRE
    MySQL 存储引擎特性和线程模型
    InnoDB体系结构---物理存储结构
    mysql数据页结构及行格式
    linux系统清理缓存
  • 原文地址:https://www.cnblogs.com/Friends-A/p/10324353.html
Copyright © 2011-2022 走看看