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

HINT

Source

Seerc2007

这是个nim游戏的变形。。
没细看直接异或就WA了。。。
然后发现原来是取到最后一个算输。。。
显然如果有一堆不是1,那么和nim游戏是一样的。。
因为后手得到两个相同的两堆后最后一次操作可以少取一个,这样就可以获胜。。
而如果都是的话就不能这么做了。。。
所以需要对1进行特判。。。

 1 #include<iostream>
 2 #include<cstdlib>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<algorithm>
 7 #include<string>
 8 #include<map>
 9 #include<queue>
10 #include<vector>
11 #include<set>
12 #define inf 1000000000
13 #define maxn 10000+5
14 #define maxm 10000+5
15 #define eps 1e-10
16 #define ll long long
17 #define for0(i,n) for(int i=0;i<=(n);i++)
18 #define for1(i,n) for(int i=1;i<=(n);i++)
19 #define for2(i,x,y) for(int i=(x);i<=(y);i++)
20 #define for3(i,x,y) for(int i=(x);i>=(y);i--)
21 #define for4(i,x) for(int i=head[x],y=e[i].go;i;i=e[i].next,y=e[i].go)
22 using namespace std;
23 int read(){
24     int x=0,f=1;char ch=getchar();
25     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
26     while(ch>='0'&&ch<='9'){x=10*x+ch-'0';ch=getchar();}
27     return x*f;
28 }
29 int main(){
30     //freopen("input.txt","r",stdin);
31     //freopen("output.txt","w",stdout);
32     int n=read();
33     for1(i,n){
34         int m=read();
35         int x=read(),flag=1;
36         if(x!=1)flag=0;
37         for1(i,m-1){
38             int y=read();if(y!=1)flag=0;
39             x^=y;
40         }
41         if(flag==1){
42             if(x==0)cout<<"John"<<endl;
43             else cout<<"Brother"<<endl;
44         }
45         else{
46             if(x==0)cout<<"Brother"<<endl;
47             else cout<<"John"<<endl;
48         }
49     }
50     return 0;
51 }

View Code

转载于:https://www.cnblogs.com/htwx/articles/5498916.html

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

  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. bzoj 1022: [SHOI2008]小约翰的游戏John(anti-nim)

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

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

    $ \color{#0066ff}{ 题目描述 }$ 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取 的时候,可以随意选择一堆石子,在这堆石子中取走任 ...

  7. bzoj 1022: [SHOI2008]小约翰的游戏John(反nim游戏)

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

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

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

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

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

最新文章

  1. java明星养成游戏_#IT明星不是梦#Java14不得不知的5个新功能
  2. UVa 10420 List of Conquests
  3. 大正整数排序~(结构体排序~)
  4. Angular 2.x 从0到1 (五)史上最简单的Angular2教程
  5. 竹签子毕竟是_毕竟是什么程序和功能?
  6. 字符集匹配:\s 匹配一个空格,一边后面加量词表示多个空格,\s*表示0个以上空格,\s+表示1个以上空格,\s相当于[\f\r\n\t ]5种空白字符。...
  7. mysql 主键互换_MySQL-什么方法可以快速的交换两条记录的ID?
  8. 若依如何使用多数据源?
  9. Flash Builder 4.7 注释字体修改
  10. 中国电信运营商布局云计算“赛道”面临三大挑战
  11. 如何复制百度文库上的文本
  12. ZIGBEE 工程内区分终端与协调器
  13. 中国银联Applepay客户端接入
  14. 解开神经科学中的交叉频率耦合
  15. 第一章第六天Java基础语法 嵌套循环
  16. 常用的防火墙命令总结
  17. MySQL-基本概念与查询操作(DESC/SELECT/FROM/WHERE/LIKE)
  18. js如何判断保留两位小数
  19. Android App打开淘宝(店铺或商品)
  20. Ka的分治|归并排序,注释详尽

热门文章

  1. oracle ora-3136,ORA-3136 错误解决 .
  2. LeetCode 13 罗马符号转化为数字(难度: Easy)
  3. jovi语音助手安装包_jovi语音助手安装包2016
  4. printf 打印结构体成员函数出错原因分析
  5. 记一次git pull报错问题 is owned by: ‘xxx‘ but the current user is ‘xxx‘
  6. 通过动态域名解析(DDNS)实现远程控制Windows主机
  7. 怎么创建dllwenjian_怎样新建一个*.dll的文件?
  8. selenium处理iframe标签
  9. 魅族6支持html吗,不知道你们发现了么,魅族Flyme6 超好用的隐藏功能
  10. 计算机一级office考试攻略,计算机一级考试MSOffice应试技巧