[POJ2234]Matches Game

Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 9297   Accepted: 5365

Description

Here is a simple game. In this game, there are several piles of matches and two players. The two player play in turn. In each turn, one can choose a pile and take away arbitrary number of matches from the pile (Of course the number of matches, which is taken away, cannot be zero and cannot be larger than the number of matches in the chosen pile). If after a player’s turn, there is no match left, the player is the winner. Suppose that the two players are all very clear. Your job is to tell whether the player who plays first can win the game or not.

Input

The input consists of several lines, and in each line there is a test case. At the beginning of a line, there is an integer M (1 <= M <=20), which is the number of piles. Then comes M positive integers, which are not larger than 10000000. These M integers represent the number of matches in each pile.

Output

For each test case, output "Yes" in a single line, if the player who play first will win, otherwise output "No".

Sample Input

2 45 45
3 3 6 9

Sample Output

No
Yes

Source

POJ Monthly,readchild

THINKING

  Nim游戏的经典模型。

  随机博弈指的是这样的一个博弈游戏,目前有任意堆石子,每堆石子个数也是任意的,双方轮流从中取出石子,规则如下:1)每一步应取走至少一枚石子;每一步只能从某一堆中取走部分或全部石子;2)如果谁取到最后一枚石子就胜。也就是尼姆博弈(Nimm Game)必败局面:也叫奇异局势无论做出何出操作,最终结果都是输的局面。必败局面经过2次操作后,可以达到另一个必败局面。必胜局面:经过1次操作后可以达到必败局面。即当前局面不是必败局面就是必胜局面,而必胜局面可以一步转变成必败局面。

  最终状态:
  (1)最后剩下一堆石子;(必胜局面)

  (2)剩下两堆,每堆一个;(必败局面)

  (3)当石子剩下两堆,其中一堆只剩下1颗,另一堆剩下多于n颗石子时,当前取的人只需将多于1颗的那一堆取出n-1颗,则局面变为刚才提到的必败局面。(必胜局面)判断当前局势是否为必胜(必败)局势:
    1)把所有堆的石子数目用二进制数表示出来,当全部这些数按位异或结果为0时当前局面为必败局面,否则为必胜局面;
    2)在必胜局面下,因为所有数按位异或的结果
是大于零的,那么通过一次取,将这个(大于其它所有数按位异或的结果的)数下降到其它所有数按位异或的结果,这时局面就变为必败局面了。定理:一组自然数中必然存在一个数,它大于等于其它所有数按位异或的结果。证明:原命题等价于,设a1^a2^... ^an=p,p≠0时,必存在k,使得ak^p<ak< span="">(当p=0时,对于任意的k,有ak^p=ak)。
    设p的最高位是第q位,则至少存在一个k,使得ak的第q位也是1,而ak^p的第q位为0,所以ak^p<ak
      补缀一点,(a^b)^b=a^(b^b)=a^0=a,所以ak^p相当于“其它所有数按位异或的结果”。

  参考:https://sites.google.com/site/lene13/Home/sophi-mass/0-7

  例1:2 45 4545^45=0,45和45的异或等于0。

  例 2:3 3 6 9局势(3,6,9)因为3^6^9不等于0,所以这是一个必胜局势。 

  3 011^6 110 5 101 即从第3堆中的9个中取走9-5=4个,则(3,6,9)->(3,6,5),3^6^5=0,故(3,6,5)为奇异局势,即从必胜局势转变成必败局势。

解释来源:http://blog.chinaunix.net/uid-20776510-id-1846450.html

CODE

  PASCAL记得不要用EOF,要用seekeof才好。

var x,y,n:int64;i:longint;
procedure main;
begin
    y:=0;
    read(n);
    for i:=1 to n do
        begin
            read(x);
            y:=y xor x;
        end;
    if y=0 then writeln(‘No‘)
    else writeln(‘Yes‘);
end;
begin
    while not seekeof do
        main;
end.

时间: 2024-10-18 18:35:46

[POJ2234]Matches Game的相关文章

POJ2234 Matches Game 尼姆博弈 博弈论

http://poj.org/problem?id=2234 尼姆博弈(Nimm's Game) 指的是这样一个博弈游戏:有任意堆物品,每堆物品的个数是任意的,双方轮流从中取物品,每一次只能从一堆物品中取物品,最少取一件,取到最后一件物品的人获胜. 结论:把每堆物品数全部异或起来,如果得到的值为0,那么先手必败,否则先手必胜. 直接判定即可. 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #

组合博弈入门

人生有“三晃”:一晃大了,一晃老了,一晃没了.我晃一下就够了... 以下为网上搜集资料的汇总: 组合游戏定义:        1.有且仅有两个玩家    2.游戏双方轮流操作    3.游戏操作状态是个有限的集合(比如:取石子游戏,石子是有限的,棋盘中的棋盘大小的有限的)  4.游戏必须在有限次内结束  5.当一方无法操作时,游戏结束. (一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜.     显然,如果n=m+

博弈论类题目小结——转载

出处http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 首先当然要献上一些非常好的学习资料: 基础博弈的小结:http://blog.csdn.net/acm_cxlove/article/details/7854530 经典翻硬币游戏小结:http://blog.csdn.net/acm_cxlove/article/details/7854534 经典的删边游戏小结:http://blog.csdn.net/acm

POJ 博弈论

poj1704 Georgia and Bob 题目链接:http://poj.org/problem?id=1704 题意:如图所示,两个人在玩一个游戏,排成直线的格子上有n个棋子,两人依次将棋子向左移动可以移动任意格子,但是不能超过前面的棋子,也不允许将两个棋子放在同一个格子里面,无法进行移动的一方失败,问对于某个状态先手是否能赢. 分析:若n为偶数,则将棋子两两分为一组,转化为Nim,棋子间的格子即为每个数,若右边的格子左移则可视为取走了石子,若左边的格子左移,第二个人只要将增加的格子减去

【poj2234】 Matches Game

http://poj.org/problem?id=2234 (题目链接) 题意:经典取火柴游戏 Solution  裸的Nim游戏,也就是取石子.  整个游戏的sg值为每一堆火柴(子游戏)的异或和.   代码: // poj2960 #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cma

[poj2234]Matces Game_博弈论

Matches Game poj-2234 题目大意:n堆石子的Nim游戏,anti-SG. 注释:$1\le n\le 20$. 想法:用Colon定理即可.具体见:小约翰的游戏 最后,附上丑陋的代码... ... #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int main() { int n; whi

解决Android中No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse问题

解决Android中No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse问题http://blog.csdn.net/u012336923/article/details/48289485 /路径/app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.0.1/res/values-v23/v

编译或运行时可能会出现错误: Error:Error retrieving parent for item: No resource found that matches the given name “Theme.AppCompat.Light”

这个问题我在刚开始写"HelloWorld"时就遇到,以为是API版本太高,下载了常用的API 19.17--一系列的,后来还是有问题.就上网查了很多,遇到几篇不错的文章,记录下来,方便以后查看. No resource found that matches the given name 'Theme.AppCompat.Light 的完美解决方案  http://www.360doc.com/content/15/0316/15/9200790_455576135.shtml And

【转】eclipse新建项目,报错“Error: workspace\appcompat_v7\res\values-v21\styles_base.xml No resource found that matches the given name”

原文网址:http://www.cnblogs.com/mbp-study/p/5268478.html 新建项目报错,不知道为什么,以前从未出现过的错误,把sdk更新之后,出现莫名错误,自己也是一知半解,在网上找了好久的错误,终于在一个english网站找到了解决方法,soga,从未觉得english如此美好 错误信息如下 ....\appcompat_v7\res\values-v21\styles_base.xml:75: error: Error retrieving parent fo