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
利用SJ定理来解决此问题

Anti-SG游戏:

定义:桌子上有N堆石子,游戏者轮流取石子。

每次只能从一堆中取出任意数目的石子,但不能不取。

取走最后一个石子者败。

SJ定理:

对于任意一个Anti-SG游戏,如果我们规定当局面中所有的单一游戏的SG值为0时,游戏结束。

先手必胜当且仅当:(1)游戏的SG函数不为0且游戏中某个单一游戏的SG函数大于1;

(2)游戏的SG函数为0且游戏中没有单一游戏的SG函数大于1。

显然在这里SG[X] = X;那么只要满足SJ定理即可AC;

代码:

#include <stdio.h>
#include <iostream>
#include <cstring>
using namespace std;
int main()
{int t , n , sg[1000];scanf("%d" , &t);while(t--){int res = 0 , flag = 0;scanf("%d" , &n);for(int i = 0 ; i < n ; i++){scanf("%d" , &sg[i]);if(sg[i] > 1){flag = 1;}}for(int i = 0 ; i < n ; i++){res ^= sg[i];}if(res != 0 && flag == 1){printf("John\n");}else if(res == 0 && flag == 0){printf("John\n");}else{printf("Brother\n");}}return 0;} 

[SHOI2008]小约翰的游戏John(博弈+SJ定理)相关推荐

  1. bzoj1022: [SHOI2008]小约翰的游戏John 博弈

    裸的Anti-Nim(其实刚学会我会乱说?),结论是:当且仅当每堆石子为1且游戏SG值为0,或有些堆的石子数大于1且游戏的SG值不为0时,先手必胜. 特殊情况不难证明,当SG值不为0时,若还有至少两堆 ...

  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 AntiNim游戏

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. Iframe 用法浅析
  2. 架构设计本质:系统与子系统、模块与组件、框架与架构
  3. 人工智能的另一方向:基于忆阻器的存算一体技术
  4. 如何高效学Python?好用的爬虫工具又有哪些?
  5. fixture.detectChange开始单步调试,如何执行到Directive的ngAfterViewInit钩子
  6. oracle9i 查询scn,在oracle10g 10.2.0.1上测试不完全恢复_recover database until scn
  7. ArrayList的add方法值被覆盖(android项目)
  8. mysql centos_centos7mysql安装
  9. infogan 生成mnist 手写数字
  10. 在安卓手机中使用微信保存图片提示失败的处理
  11. 数据结构与算法实验4——字符串和数组 7-5 病毒变种
  12. 利用python和递归实现赶鸭子问题
  13. linux系统运维面试2000多题
  14. 如何辨识“真假”敏捷?
  15. solr 通过DIH方式导入创建索引
  16. unity-shader-ShaderGraph可视化shader
  17. FFmpeg Invalid data found when processing input
  18. linux服务器查看硬盘大小,Linux 服务器硬盘使用情况查看
  19. 抖音短视频零基础能做到百万粉丝吗?国仁楠哥
  20. python数据预处理实验_PimaIndiansdiabetes-数据预处理实验(一)

热门文章

  1. whm面板降mysql_WHMCS与Cpanel/WHM面板整合方法-Cpanel/WHM管理使用教程 | 麦田一棵葱...
  2. Swoole 介绍以及三步快速安装 swoole 教程
  3. 微信小程序全局配置分享指定标题、图片、路径
  4. matlab 524288,Cannot display summaries of variables with more than 524288 elements. 怎么...
  5. 腾讯会议中如何使用虚拟摄像头
  6. Win系统EPUB阅读软件评测
  7. 上传excel单元格校验(通过注解实现)
  8. MacBook更新系统空间不足/无限重启/无法退出更新程序
  9. 使用VSLinux插件开发和调试
  10. UITT不忘初心,为交易而生