[Bzoj1022][SHOI2008]小约翰的游戏John(博弈论)
1022: [SHOI2008]小约翰的游戏John
Time Limit: 1 Sec Memory Limit: 162 MB
Submit: 2976 Solved: 1894
[Submit][Status][Discuss]
Description
小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取
的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取,我们规定取到最后一
粒石子的人算输。小约翰相当固执,他坚持认为先取的人有很大的优势,所以他总是先取石子,而他的哥哥就聪明
多了,他从来没有在游戏中犯过错误。小约翰一怒之前请你来做他的参谋。自然,你应该先写一个程序,预测一下
谁将获得游戏的胜利。
Input
本题的输入由多组数据组成第一行包括一个整数T,表示输入总共有T组数据(T≤500)。每组数据的第一行包
括一个整数N(N≤50),表示共有N堆石子,接下来有N个不超过5000的整数,分别表示每堆石子的数目。
Output
每组数据的输出占一行,每行输出一个单词。如果约翰能赢得比赛,则输出“John”,否则输出“Brother”
,请注意单词的大小写。
Sample Input
Sample Output
- John
- Brother
分析:
好吧,我不讲博弈论,讲的太博大精深了。我会尽量讲的通(bo)俗(da)易(jing)懂(shen),
设现在我们所有堆的石头数量都为1。如果有奇数堆,我们是不是输了。。。。设为情况①(必输)
设现在我们所有堆的石头数量都为1。如果有偶数堆,我们是不是赢了。。。。设为情况②(必赢)
(好吧上面两个解释太白痴了。)
设现在我们有一堆石头数量不为2,其他石头都为1.
如果我们有奇数堆数量为1的石头,我们只用把那一堆数量不为2的石头取完,对面就会面临情况①。然后你就赢了2333.
如果我们有偶数堆数量为1的石头,我们只用把那一堆数量不为2的石头变成1,对面就会面临情况①。然后你就赢了2333.
我们把上面两种情况设为情况③(必赢)。
(是不是也很白痴)
好吧,我们再来看另外的情况,我们现在有大于等于2堆石头数量不为2.
如果此时所有石头异或和为奇数我们设为情况④
如果此时所有石头异或和为偶数我们设为情况⑤
如果石头异或和为奇数,我们可以取数量最多的那堆,使异或和变成偶数。此时④可以变成⑤
如果石头异或和为偶数,我们必须取,此时异或和一定变为奇数,⑤又变成了④。然后我们是不是还可以取完一堆石头,也就可能变成③。
所以情况④使对面状态变成⑤,情况⑤会使对面面临状态⑤或③。
所以④(必赢),⑤(必输)。
好了我们就知道了:②③④必赢,①⑤必输,没了。
AC代码:
- # include <cstdio>
- using namespace std;
- int T,n,ans,x,num;
- int main(){
- scanf("%d",&T);
- while(T--){
- scanf("%d",&n);
- ans = num = ;
- for(int i = ;i <= n;i++){
- scanf("%d",&x);
- if(!x)continue;
- ans ^= x;
- if(x >= )num++;
- }
- if((!num && !ans) || (ans && num))puts("John");
- else puts("Brother");
- }
- }
[Bzoj1022][SHOI2008]小约翰的游戏John(博弈论)的更多相关文章
- [bzoj1022][SHOI2008]小约翰的游戏 John (博弈论)
Description 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取 ...
- BZOJ1022:[SHOI2008]小约翰的游戏John(博弈论)
Description 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取 ...
- 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堆石子,小约翰和他的哥哥轮流取石子,每个人取 的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不 ...
随机推荐
- bat判断服务是否启动
sc query|find "tomcat6" && echo yes || echo nosc query|find "eventlog" & ...
- SQL Server 2012使用OFFSET/FETCH NEXT分页及性能测试
最近在网上看到不少文章介绍使用SQL Server 2012的新特性:OFFSET/FETCH NEXT 实现分页.多数文章都是引用或者翻译的这一篇<SQL Server 2012 - Serv ...
- Android中单选框RadioButton的基本用法
总结一下设置图标的三种方式: (1)button属性:主要用于图标大小要求不高,间隔要求也不高的场合. (2)background属性:主要用于能够以较大空间显示图标的场合. (3)drawableL ...
- vc++创建多线程应用
构建线程参数结构体: typedef struct { int nIndex; HANDLE hThread; int param1; ... }ThreadParam; 创建线程数组: Thread ...
- VC无窗口控制台程序
VC无窗口控制台程序 #pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartu ...
- idea集成 MyBatis Generator 插件,自动生成dao,model,sql map文件
1.集成到开发环境中 以maven管理的功能来举例,只需要将插件添加到pom.xml文件中即可.(注意此处是以plugin的方式,放在<plugins></plugins>中间 ...
- 点击按钮打开一个新的窗口 关键词(Intent, setData , putExtra , startActivity |Bundle)
M3U8_Video_demo 项目 //------------------ 创建发送private void playVideo(String source, String title) { if ...
- ubuntu 18.04 start myproject
#!/bin/bash now=$(date +%Y%m%d) cmd='/home/hu/go/src/github.com/coredns/coredns/coreserver -conf /ho ...
- mysql时间的处理
mysql中格式化时间为: 1,DATE_FORMAT(APPLYDATE,'%Y-%m-%d %H:%i:%S') AS APPLYDATE 2,DATE_FORMAT(CHKSIGNDATE, ' ...
- c# xml本地化用法
1.普通格式 2.占位符格式 注意事项: 1.Pascal命名法 2.key只是key,中间不需要空格,value可以空格 3.占位符左右两边分别空一格