Description

小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取,我们规定取到最后一粒石子的人算输。小约翰相当固执,他坚持认为先取的人有很大的优势,所以他总是先取石子,而他的哥哥就聪明多了,他从来没有在游戏中犯过错误。小约翰一怒之前请你来做他的参谋。自然,你应该先写一个程序,预测一下谁将获得游戏的胜利。

Input

本题的输入由多组数据组成,第一行包括一个整数T,表示输入总共有T组数据(T小于等于500)。
每组数据的第一行包括一个整数N(N小于等于50),表示共有N堆石子
接下来有N个不超过5000的整数,分别表示每堆石子的数目。

Output

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

Solution:

在普通的Nim游戏当中,若各堆石子数异或和不为0,则先手必胜
然而在本题中,取走最后的那颗石子人输
我们来分情况讨论
1.若当前每堆石子数都为1,且石子堆数为奇数,则先手必败,为偶数,先手必胜
2.若某一堆石子数>1且各堆石子异或和不为0,则先手必胜
为什么呢?(~不知道......) 我们来推导一下
结论1是很显然的,我们就不再做出赘述,如何来证明结论2呢
根据普通的Nim游戏可以知道,在先手必胜的情况下,总是有某种策略可以让局势重新转换为先手必胜的局势(先后手在不断变换),而先手必败的局势是只能通向先手必胜的。
又由于我是先手,则在双方都采取先手必胜->先手必胜的策略的情况下,最后输的总是我。
那么转换到本题,在满足2条件的情况下,最后赢得肯定是我。
得证。

Code:

#include<bits/stdc++.h>
#define N 101
using namespace std;
int n,a[N];
int read(){int x=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}return x*f;
}
int main(){int Case=read();begin:Case--;if(Case<0)return 0;n=read();memset(a,0,sizeof(a));for(int i=1;i<=n;i++){a[i]=read();a[0]^=a[i];}sort(a+1,a+n+1);if((a[n]==1&&!a[0])||(a[0]&&a[n]>1))puts("John");else puts("Brother");goto begin;
}

转载于:https://www.cnblogs.com/NLDQY/p/10216881.html

[SHOI2008]小约翰的游戏相关推荐

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

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

  2. 1022: [SHOI2008]小约翰的游戏John【Nim博弈,新生必做的水题】

    1022: [SHOI2008]小约翰的游戏John Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 2709  Solved: 1726 [Submi ...

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

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

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

    title: 'BZOJ 1022 [SHOI2008]小约翰的游戏John' categories: BZOJ date: 2016-3-8 21:27:00 tags: [SG函数,博弈论] De ...

  5. BZOJ1022 [SHOI2008]小约翰的游戏John 【博弈论】

    1022: [SHOI2008]小约翰的游戏John Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 3014  Solved: 1914 [Submi ...

  6. bzoj 1022: [SHOI2008]小约翰的游戏John(anti-nim)

    1022: [SHOI2008]小约翰的游戏John Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 2375  Solved: 1497 [Submi ...

  7. [SHOI2008]小约翰的游戏John

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

  8. [SHOI2008]小约翰的游戏John(博弈+SJ定理)

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

  9. 1022: [SHOI2008]小约翰的游戏John

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

最新文章

  1. 开发流程与版本管理规范
  2. VWware安装ubuntu设置静态IP
  3. Nginx的rewrite之rewrite指令
  4. typeof 数据类型转换
  5. CorePlot-曲线图
  6. c++ builder groupbox修改样式_Pandas也能修改样式?快速给你的数据换个Style!
  7. win10 预览版启用 Hyper-V 虚拟机 装 boot2docker找不到菜单按钮问题
  8. PAT乙级 1097 矩阵行平移
  9. 奥斯汀页眉怎么设置_Word页眉横线怎么去掉与页眉页脚如何设置删除,含首页、奇数偶数页、横纵向页不同及第一页与最后一页不要页...
  10. 2020年408真题_2020年港澳台联考真题——英语!
  11. 轻松禁止自动更新FLASH插件有绝招
  12. 2017年PHP培训机构排名
  13. 藤子不二雄博物馆之行
  14. 学生上课签到系统开发总结
  15. MATLAB处理EXCEL文件
  16. 关于信息安全服务资质认证规范及实施规则换版的通知
  17. 医美“非标化”埋雷 新氧科技流量变现受制约
  18. 插入排序,二分版插入排序和希尔排序的差别详解(C语言)
  19. 机票报价高并发实施的关键路径
  20. 【科普详解】目前传感器的种类(一)

热门文章

  1. tms570 can 接收大量数据_CAN通讯系列--AUTOSAR架构的CAN Interface7
  2. java二维数组高纬低纬_2018-05-17 第十一天
  3. php xmlhttp.responsetext,XMLHttpRequest中responseText怎么获取指定div的内容,而不是整个HTML的内容...
  4. 进程用户态 上下文切换需要保存哪些_漫话性能:CPU上下文切换
  5. java 飞信接口_java 飞信接口
  6. 二叉排序树的中序遍历规律_看懂这篇文章,玩转二叉查找树
  7. relu不可微为什么可用于深度学习
  8. c语言字符串67ASDSff,(指针编程题目.doc
  9. P1080 国王游戏(贪心)
  10. 天翼云从业认证(4.10)网络直播场景解决方案(CDN)