[bzoj1022][SHOI2008]小约翰的游戏 John (博弈论)
Description
小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取,我们规定取到最后一粒石子的人算输。小约翰相当固执,他坚持认为先取的人有很大的优势,所以他总是先取石子,而他的哥哥就聪明多了,他从来没有在游戏中犯过错误。小约翰一怒之下请你来做他的参谋。自然,你应该先写一个程序,预测一下谁将获得游戏的胜利。
Input
本题的输入由多组数据组成,第一行包括一个整数T,表示输入总共有T组数据(T≤500)。每组数据的第一行包括一个整数N(N≤50),表示共有N堆石子,接下来有N个不超过5000的整数,分别表示每堆石子的数目。
Output
每组数据的输出占一行,每行输出一个单词。如果约翰能赢得比赛,则输出“John”,否则输出“Brother”,请注意单词的大小写。
Sample Input
3
3 5 1
1
1
Sample Output
Brother
HINT
【数据规模】
对于40%的数据,T ≤ 250。
对于100%的数据,T ≤ 500。
Source
分析
标准的博弈题的题面……
看起来似乎很像Nim!游戏,只是这里的获胜条件与Nim恰好相反:“取到最后一粒石子的人算输”。我们可以从边界状态考虑:当石子只剩一堆时,若石子总数为1则为必败状态,若石子总数不为1则为必胜状态;当石子有多堆而每堆只有一枚石子时,若各堆石子的异或值为1则为必败状态,否则为必胜状态。
类比Nim游戏的解法,我们发现每堆石子的SG值即为这堆石子的数量。那么我们就可以有这一结论:若各堆石子数量均为1,则SG值为0时是必胜状态。然而当各堆石子不全为1时情况却有所不同:首先,SG值为0时,若先手操作后将SG值变为了SG',根据SG定理中证明的结论,此时游戏中一定存在一个操作可以将SG值恢复为0;但如果先手操作后游戏中仅有一堆石子数量超过1,后手就拥有“将这堆石子取完”和“将这堆石子取到仅剩1个”这两种选择,而由前面的推论,这两种选择一定有一种会将先手送到必败状态中。亦即,状态为“游戏中各堆石子不全为1且SG值不为0”时,接下来要操作的一方占据主动地位。
综上,若各堆石子全为1,则SG值为0时先手必胜;若各堆石子不全为1,则SG值不为0时先手必胜。我们还可以构造出先手必胜时的操作策略:各堆石子不全为1,且SG值不为0时,先手只需判断游戏中石子数不为1的堆的数量是否为1.若只有一堆石子数大于1,则先手应选择“将这堆全部取完”和“将这堆取到只剩1”这两种操作中能够使SG值得到1的操作;若不止一堆石子数大于1,则先手只需将游戏的SG值取到0即可。至于这种操作的可行性,大概在关于SG定理的论文中都可以找到吧。


#include <cstring>
#include <cstdlib>
#include <ctime>
#include <cctype>
#include <algorithm>
FILE * template< x = ch - - }
inline
}
inline SG = , All1 = getd(n);
;i < n;++i){
getd(a);
)All1 = SG ^= a;
}
}
}
#ifdef DEBUG
SetIO(fopen( SetFile();
SetIO(stdin, stdout);
init();
work();
#ifdef DEBUG
printf( ;
}
博弈论
[bzoj1022][SHOI2008]小约翰的游戏 John (博弈论)的更多相关文章
- BZOJ1022:[SHOI2008]小约翰的游戏John(博弈论)
Description 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取 ...
- [Bzoj1022][SHOI2008]小约翰的游戏John(博弈论)
1022: [SHOI2008]小约翰的游戏John Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2976 Solved: 1894[Submit] ...
- BZOJ1022 [SHOI2008]小约翰的游戏John 【博弈论】
1022: [SHOI2008]小约翰的游戏John Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3014 Solved: 1914 [Submi ...
- bzoj千题计划112:bzoj1022: [SHOI2008]小约翰的游戏John
http://www.lydsy.com/JudgeOnline/problem.php?id=1022 http://www.cnblogs.com/TheRoadToTheGold/p/67448 ...
- bzoj1022: [SHOI2008]小约翰的游戏John(博弈SG-nim游戏)
1022: [SHOI2008]小约翰的游戏John 题目:传送门 题目大意: 一道反nim游戏,即给出n堆石子,每次可以取完任意一堆或一堆中的若干个(至少取1),最后一个取的LOSE 题解: 一道 ...
- 【bzoj1022】[SHOI2008]小约翰的游戏John 博弈论
Description 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取 的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不 ...
- BZOJ1022 [SHOI2008]小约翰的游戏John
Description 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取 的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不 ...
- [BZOJ1022] [SHOI2008] 小约翰的游戏John (SJ定理)
Description 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取 ...
- [bzoj1022][SHOI2008]小约翰的游戏John (反Nim游戏)
Description 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取 的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不 ...
随机推荐
- Go Web 编程 第一章 Web相关概念
第一章 Go与Web应用 Go学习群:415660935 1.1 Web应用 在计算机的世界里,应用(application)是一个与用户进行交互,并完成用户特定任务的软件程序.而Web应用则是部署在 ...
- windows+python3.6下安装fasttext+fasttext在win上的使用+gensim(fasttext)
真是坑了好久,faxttext对win并不是很友好,所以遇到了很多坑,记录下来,以供大家少走弯路. 法1:刚开始直接用pip install fasttext,最后一直报下面这个错误 “error:M ...
- Mysql储存过程5: while
循环结构 while create procedure name() begin while 条件 do SQL语句 end while; end$ create procedure aa6() be ...
- shell中$*与$@的区别
$*所有的位置参数,被作为一个单词 注意:"$*"必须被""引用 $@ 与$*同义,但是每个参数都是一个独立的""引用字串,这就意味着参数被 ...
- 保护眼睛(改变窗口颜色和Pdf背景颜色)
保护眼睛(改变窗口颜色和Pdf背景颜色) 昨天用了一个好朋友告诉我的保护眼睛的方法,效果很不错哦-- 今天告诉大家,一起爱护偶们明亮的眼睛吧!!! 首先需要改一下设置,如果常常用电脑很容易 ...
- shell将多行文本重定向到文件【转】
在shell中,使用Here Document方式将文本重定向到文件,格式如下: ( cat << EOF 要写的文本 EOF ) > 目标文件 示例test.sh: #! /bin ...
- mysql 配置数据库主从同步
参考:https://www.cnblogs.com/kevingrace/p/6256603.html http://www.51testing.com/html/00/130600-243651. ...
- 美化的select下拉框
ie7浏览器以后的下拉框,给他加上边框样式,是没用的.要是想做出样式好看的下拉框需要用js或者jquery来模拟实现. 代码如下: <div class="r"> &l ...
- CPU运行时间——time
用途说明time命令常用于测量一个命令的运行时间,注意不是用来显示和修改系统时间的(这是date命令干的事情).但是今天我通过查看time命令的手册页,发现它能做的不仅仅是测量运行时间,还可以测量内存 ...
- set -o vi AIX下shell
set -o vi 再用esc+K键就可以使用上一条指令了 esc+kesc+j上下翻 ksh默认是emacs风格的.set -o emacs 在AIX下使用自己已经使用过的命令 在AIX下使用,默认 ...