John
来源:互联网 发布:操作系统fifo算法 编辑:程序博客网 时间:2024/06/10 18:45
John
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 205 Accepted Submission(s): 106
Both of players are using optimal game strategy. John starts first always. You will be given information about M&Ms and your task is to determine a winner of such a beautiful game.
Constraints:
1 <= T <= 474,
1 <= N <= 47,
1 <= Ai <= 4747
233 5 111
JohnBrother
这一题有点类似于NIM游戏,当符合一定条件的时候,先手可必胜。这里用到了一个规律。
把每一堆的数目进行异或运算(每一堆的数目都是1除外),最后的结果有两种,为0或不为0,若为0则各堆的各二进制位相加不进位以后所得到的数的各位数一定是一个偶数。我们称结果为0的情况为平衡状态,如果刚开始局面是一个不平衡状态,即各堆的各位二进制数的和不全为偶数,假定为先手的必胜残局。
举个例子:
下面应用此获胜策略来考虑4-堆的Nim取子游戏。其中各堆的大小分别为7,9,12,15枚硬币。用二进制表示各数分别为:0111,1001,1100和1111。于是可得到如下一表:
大小为7的堆 0 1 1 1
大小为9的堆 1 0 0 1
大小为12的堆 1 1 0 0
大小为15的堆 1 1 1 1
由Nim取子游戏的平衡条件可知,此游戏是一个非平衡状态的取子游戏,因此,游戏人I在按获胜策略进行取子游戏下将一定能够取得最终的胜利。具体做法有多种,游戏人I可以从大小为12的堆中取走11枚硬币,使得游戏达到平衡(如下表),
大小为7的堆 0 1 1 1
大小为9的堆 1 0 0 1
大小为12的堆 0 0 0 1
大小为15的堆 1 1 1 1
之后,无论游戏人II如何取子,游戏人I在取子后仍使得游戏达到平衡。
同样的道理,游戏人I也可以选择大小为9的堆并取走5枚硬币而剩下4枚,或者,游戏人I从大小为15的堆中取走13枚而留下2枚。
归根结底,Nim取子游戏的关键在于游戏开始时游戏处于何种状态(平衡或非平衡)和第一个游戏人是否能够按照取子游戏的获胜策略来进行游戏。
- John
- John
- John
- John
- John Carmack
- 《John Q》
- John感悟
- John感悟
- 【HDU1097】John
- HDU1907-John
- hdu1907 John
- John Keats
- 【poj3480】John
- hdu1907 John
- 1907 John
- hdu1907 John
- Professor John
- 关于John Carmack
- 如何在程序中获取本机(或局域网中)的SQL Server服务器名称
- sql Server 触发器入门代码~~
- SQL 2005 远程连接问题
- 如果有一天
- memset
- John
- Linux操作系统文件系统基础知识详解
- OSCache的源码编译Cache.java 文件报add(Class, T) in the type EventListenerList is not applicable for the arguments 错误的解决
- binary_search
- HDU 1915 Arne Saknussemm
- J2SE API读取Properties文件的六种方法
- 人生应该记住的16句良言
- rfc2898:PKCS #5:基于密码的密码系统说明书版本 2.0.B
- 做什么网站赚钱