Description

小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取

的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取,我们规定取到最后一

粒石子的人算输。小约翰相当固执,他坚持认为先取的人有很大的优势,所以他总是先取石子,而他的哥哥就聪明

多了,他从来没有在游戏中犯过错误。小约翰一怒之前请你来做他的参谋。自然,你应该先写一个程序,预测一下

谁将获得游戏的胜利。

Input

本题的输入由多组数据组成第一行包括一个整数T,表示输入总共有T组数据(T≤500)。每组数据的第一行包

括一个整数N(N≤50),表示共有N堆石子,接下来有N个不超过5000的整数,分别表示每堆石子的数目。

Output

每组数据的输出占一行,每行输出一个单词。如果约翰能赢得比赛,则输出“John”,否则输出“Brother”

,请注意单词的大小写。

Sample Input

2

3

3 5 1

1

1

Sample Output

John

Brother

前言

定义\(mex\)函数的值为不属于集合\(S\)中的最小非负整数,即:

\[mex(S)=min\lbrace x \rbrace(x\notin S,x \in N)
\]

例如\(mex(\lbrace 0,2,4\rbrace)=1\)。 对于状态\(x\)和它的所有\(k\)个后继状态\(y_1,y_2,...,y_n\),定义\(SG\)函数:

\[SG(x)=mex\lbrace SG (y_1),SG(y_2),...SG(y_n)\rbrace
\]

有向图游戏的和的SG函数值等于它包含的各个子游戏SG函数值的异或和,即:

\[SG(G)=SG(G_1)\bigoplus SG(G_2)\bigoplus ...\bigoplus SG(G_n)
\]

解题报告

我们先考虑剩下石堆石子数都为1的情况。当石堆的个数为奇数时,此时处于必输态(SG值=奇数个1异或=1),反则当石堆的个数为偶数时处于必赢态(SG值=0)。

如果剩下石堆石子数存在至少两个石堆大于1的情况,如果此时SG值不等于0,由于\(SG(G)=SG(G_1)\bigoplus SG(G_2)\bigoplus ...\bigoplus SG(G_n)\),设\(SG(G)\)的二进制表示下最高位的1在第k位,你们至少存在一堆石子\(SG(G_i)\),它的第k位是1。显然\(SG(G_i) \bigoplus x<SG(G_i)\),我们从第\(i\)堆取走若干石子,相当于\(SG(G_i) \bigoplus x\),而\(x \bigoplus x=0\)。所以我们可以通过在一个石子堆里取走若干石子将总的\(SG\)值变为0。

如果只有一个石堆大于1,那么先手总可以让全1的石堆的个数变为奇数个。

结论

1、当剩下石堆石子数都为1的时,总SG值等于0必胜。

2、当剩下石堆石头数有一个大于1的时候,总SG值大于1必胜。

代码

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 2e5+10;
int main(){
int T;
cin>>T;
while(T--)
{
int n,x,ans=0;
cin>>n;
int flag=1;
for(int i=1;i<=n;i++)
{
cin>>x;
ans^=x;
if(x!=1)
flag=0;
}
if((flag&&!ans)||(!flag&&ans))
{
printf("John\n");
}
else
printf("Brother\n");
}
return 0;
}

参考资料

https://wenku.baidu.com/view/25540742a8956bec0975e3a8.html

https://oi-wiki.org/math/game-theory/

【BZOJ 1022】 [SHOI2008]小约翰的游戏John(Anti_SG)的更多相关文章

  1. bzoj 1022: [SHOI2008]小约翰的游戏John anti_nim游戏

    1022: [SHOI2008]小约翰的游戏John Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1189  Solved: 734[Submit][ ...

  2. BZOJ 1022 [SHOI2008]小约翰的游戏John

    1022: [SHOI2008]小约翰的游戏John Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1635  Solved: 1036[Submit] ...

  3. BZOJ 1022 [SHOI2008]小约翰的游戏John AntiNim游戏

    1022: [SHOI2008]小约翰的游戏John Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1475  Solved: 932[Submit][ ...

  4. BZOJ 1022: [SHOI2008]小约翰的游戏John (Anti-nim)

    Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3134  Solved: 2003[Submit][Status][Discuss] Descripti ...

  5. BZOJ 1022: [SHOI2008]小约翰的游戏John【anti-SG】

    Description 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取 ...

  6. BZOJ 1022 SHOI2008 小约翰的游戏John 博弈论

    题目大意:反Nim游戏,即取走最后一个的人输 首先状态1:假设全部的堆都是1,那么堆数为偶先手必胜,否则先手必败 然后状态2:假设有两个堆数量同样且不为1,那么后手拥有控场能力,即: 若先手拿走一堆, ...

  7. BZOJ 1022: [SHOI2008]小约翰的游戏John [SJ定理]

    传送门 $anti-nim$游戏,$SJ$定理裸题 规定所有单一游戏$sg=0$结束 先手必胜: $1.\ sg \neq 0,\ 某个单一游戏sg >1$ $2.\ sg = 0,\ 没有单一 ...

  8. BZOJ.1022.[SHOI2008]小约翰的游戏John(博弈论 Anti-Nim)

    题目链接 Anti-Nim游戏: 先手必胜当且仅当: 1.所有堆的石子数为1,且异或和为0 2.至少有一堆石子数>1,且异或和不为0 简要证明: 对于1:若异或和为1,则有奇数堆:异或和为0,则 ...

  9. 51nod 1069 Nim游戏 + BZOJ 1022: [SHOI2008]小约翰的游戏John(Nim游戏和Anti-Nim游戏)

    首先,51nod的那道题就是最简单的尼姆博弈问题. 尼姆博弈主要就是判断奇异局势,现在我们就假设有三个石子堆,最简单的(0,n,n)就是一个奇异局势,因为无论先手怎么拿,后手总是可以在另一堆里拿走相同 ...

  10. bzoj 1022: [SHOI2008]小约翰的游戏John【anti-nim】

    如果全是1,那么n是奇数先手必败 否则,xor和为0先手必败 证明见 https://www.cnblogs.com/Wolfycz/p/8430991.html #include<iostre ...

随机推荐

  1. vue的组件传值

    1.父组件向子组件传值 父组件: 123456789101112 <template> <child :name="name"></child> ...

  2. php gettype()函数

      gettype() 会根据 参数类型返回值: boolean:表示变量为布尔类型 integer:表示变量为整数类型 double :表示变量为float类型(历史原因) string:表示变量为 ...

  3. Spark作业执行流程源码解析

    目录 相关概念 概述 源码解析 作业提交 划分&提交调度阶段 提交任务 执行任务 结果处理 Reference 本文梳理一下Spark作业执行的流程. Spark作业和任务调度系统是其核心,通 ...

  4. OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: unknown protocol

    gitlab版本为社区版: gitlab-ce_11.5.4-ce.0_amd64.deb 目录:/var/cache/apt/archives 配置邮箱的主要参数: user['git_user_e ...

  5. Python性能优化方案

    Python性能优化方案 从编码方面入手,代码算法优化,如多重条件判断有限判断先决条件(可看 <改进python的91个建议>) 使用Cython (核心算法, 对性能要求较大的建议使用C ...

  6. C#设计模式学习笔记:(17)中介者模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7966240.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲行为型设计模式的第五个模式--中 ...

  7. java 开发社区蔬菜、食品交易平台系统 源码

    开发环境:    Windows操作系统开发工具: MyEclipse+Jdk+Tomcat+Mysql数据库 运行效果图 源码及原文链接:https://javadao.xyz/forum.php? ...

  8. Tomcat 核心配置

    tomcat的核心配置在conf/server.xml中. <Server>   根元素 <Server>即Catalina Servlet组件. <Server por ...

  9. [20200211]使用DBMS_SHARED_POOL.MARKHOT与sql_id的计算.txt

    [20200211]使用DBMS_SHARED_POOL.MARKHOT与sql_id的计算.txt --//以前写的,使用DBMS_SHARED_POOL.MARKHOT标记热的sql_id,这样相 ...

  10. 2020软件工程作业01 Deadline: 2020/03/07 20:00pm

    1.建立博客 https://github.com/smithLIUandhisbaby 20177572 https://www.cnblogs.com/smith324/ 2.回顾——我的初心 对 ...