hdu 1850 基础尼姆博奕

Being a Good Boy in Spring Festival

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4690    Accepted Submission(s): 2804

Problem Description

一年在外 父母时刻牵挂
春节回家 你能做几天好孩子吗
寒假里尝试做做下面的事情吧

陪妈妈逛一次菜场
悄悄给爸爸买个小礼物
主动地 强烈地 要求洗一次碗
某一天早起 给爸妈用心地做回早餐

如果愿意 你还可以和爸妈说
咱们玩个小游戏吧 ACM课上学的呢~

下面是一个二人小游戏:桌子上有M堆扑克牌;每堆牌的数量分别为Ni(i=1…M);两人轮流进行;每走一步可以任意选择一堆并取走其中的任意张牌;桌子上的扑克全部取光,则游戏结束;最后一次取牌的人为胜者。
现在我们不想研究到底先手为胜还是为负,我只想问大家:
——“先手的人如果想赢,第一步有几种选择呢?”

Input

输入数据包含多个测试用例,每个测试用例占2行,首先一行包含一个整数M(1<M<=100),表示扑克牌的堆数,紧接着一行包含M个整数Ni(1<=Ni<=1000000,i=1…M),分别表示M堆扑克的数量。M为0则表示输入数据的结束。

Output

如果先手的人能赢,请输出他第一步可行的方案数,否则请输出0,每个实例的输出占一行。

Sample Input

3

5 7 9

0

Sample Output

1

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5    int m,p[101],i;
 6    while(cin>>m,m)
 7    {
 8        int ko=0;
 9        for(i=0;i<m;i++)
10        {
11            cin>>p[i];
12            ko^=p[i];
13        }
14            int s=0;
15            for(i=0;i<m;i++)
16             if(p[i]>(ko^p[i]))
17             s++;
18            cout<<s<<endl;
19    }
20 }
时间: 2024-10-24 04:54:19

hdu 1850 基础尼姆博奕的相关文章

博弈:巴什博奕(Bash Game)威佐夫博奕(Wythoff Game)尼姆博奕(Nimm Game)

巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜 对于巴什博弈可以考虑:n=(m+1)*k+s,即如果n%(m+1)!=0则先取者只需取走s物品即可保证获胜. HDU 1846:裸的. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<limits.h> t

博弈论之尼姆博奕

尼姆博奕 : 有n堆物品,每堆物品的个数是任意的,双方轮流从中取物品,一次只能从一堆物品中取部分或全部,最少取一件,取到最后一件物品的人获胜. 结论:把每堆物品数全部异或,如果得到的值为0,那么后手必胜,否则先手必胜. 关于尼姆博奕详解的:http://www.cnblogs.com/jiangjun/archive/2012/11/01/2749937.html code:(HDU-1970) 1 #include <iostream> 2 #include <cstdio> 3

尼姆博奕+SG函数

博弈这个东西真的很费脑诶.. 尼姆博奕(Nim Game):游戏者轮流从一堆棋子(或者任何道具)中取走一个或者多个,最后不能再取的就是输家.当指定相应数量时,一堆这样的棋子称作一个尼姆堆 当n堆棋子的数量满足a1 xor a2 xor a3 xor.......xor an=0(Bouton's Theorem)时 为必败态,即先手必败,对于尼姆博弈这种游戏,寻找必败态是非常重要的,那么对于必败态 有: 1.无法进行任何移动的自然是比败态 2.可以移动到必败态的是非必败态 3.必败态无论怎么操作

HDU 2176 取(m堆)石子游戏 (尼姆博奕)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2176 m堆石子,两人轮流取.只能在1堆中取.取完者胜.先取者负输出No.先取者胜输出Yes,然后输出怎样取子.例如5堆 5,7,8,9,10先取者胜,先取者第1次取时可以从有8个的那一堆取走7个剩下1个,也可以从有9个的中那一堆取走9个剩下0个,也可以从有10个的中那一堆取走7个剩下3个. Input输入有多组.每组第1行是m,m<=200000. 后面m个非零正整数.m=0退出. Output先取

杭电 1850(尼姆博弈)

Being a Good Boy in Spring Festival Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4649    Accepted Submission(s): 2774 Problem Description 一年在外 父母时刻牵挂 春节回家 你能做几天好孩子吗 寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场 悄悄

hdu 1849 (尼姆博弈)

http://acm.hdu.edu.cn/showproblem.php?pid=1849 简单的尼姆博弈: 代码如下: #include <iostream> #include <cstdio> using namespace std; int main() { int m,n,t; while(cin>>m,m) { int ans=0; for(int i=0; i<m; i++) { cin>>n; ans^=n; } if(ans==0)

HDU 1517 (类巴什博奕) A Multiplication Game

如果n在[2, 9]区间,那么Stan胜. 如果n在[10, 18]区间,那么Ollie胜,因为不管第一次Stan乘上多少,第二次Ollie乘上一个9,必然会得到一个不小于18的数. 如果n在[19, 162]这个区间呢? 比如说n=19,那么Stan乘上个2,不管Ollie怎么乘,Ollie得到的数必然在[4, 18]这个区间里面,而这里的任意一个数乘上9的话,必然会得到一个不小于19的数,Stan胜. 再比如n=162,Stan最开始乘上一个9,就将Ollie乘完以后的数限制在[18, 81

hdu 1850 Being a Good Boy in Spring Festival 博弈论之尼姆博弈,,都被自己蠢哭了!

Being a Good Boy in Spring Festival Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5157    Accepted Submission(s): 3092 Problem Description 一年在外 父母时刻牵挂 春节回家 你能做几天好孩子吗 寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场 悄悄

hdu 2176(简单小尼姆)(小尼姆的先手取子方式)

取(m堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1728    Accepted Submission(s): 1006 Problem Description m堆石子,两人轮流取.只能在1堆中取.取完者胜.先取者负输出No.先取者胜输出Yes,然后输出怎样取子.例如5堆 5,7,8,9,10先取者胜,先取者第1次