hdu1850(尼姆博弈)

原创 2013年12月04日 17:15:10

Being a Good Boy in Spring Festival

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


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
 

Author
lcy
 

Source
 
     本题是个简单的尼姆博弈。求得所有堆的异或和sum.然后扫描每堆,若Ni大于sum(除去当前堆的),则异或和大于0,必胜局,可选该堆,到底选多少呢?肯定不能随便拿,即拿了之后要保证sum^Ni等于0,即为必败局,故只能取Ni-sum这一种情况;否则不能选。
import java.util.Scanner;


public class hdu1850 {
	public static void main(String[] str)
	{
		int[] f=new int[110];
		Scanner input=new Scanner(System.in);
		do
		{
			int n=input.nextInt();
			if(0==n)break;
			int sum=0;
			for(int i=0;i<n;i++)
			{
				f[i]=input.nextInt();
				sum^=f[i];
			}
			
			int ans=0;
			for(int i=0;i<n;i++)
			{
				sum^=f[i];
				if(f[i]>sum)ans++;
				sum^=f[i];
			}
			System.out.println(ans);
		
		}while(true);
	}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

博弈论-尼姆博弈

尼姆博弈(Nimm's Game) 题型 尼姆博弈模型,大致上是这样的: 有3堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取1个,多者不限,最后取光者得胜。   分析 ...
  • u013514928
  • u013514928
  • 2017年04月04日 09:07
  • 301

ACM-尼姆博弈之取(m堆)石子游戏——hdu2176

ACM 尼姆博弈 取(m堆)石子游戏 hdu2176 改变奇异态
  • lx417147512
  • lx417147512
  • 2014年05月02日 15:40
  • 1923

hdu 1907(尼姆博弈)

尼姆博弈(Nimm Game):简单地说
  • YJX_xx
  • YJX_xx
  • 2014年05月03日 15:12
  • 988

LeetCode从零单排之一分段——Nim Game(尼姆博弈)

原题(你们这里洋文好的人很多啊,我就不瞎翻译了): You are playing the following Nim Game with your friend: There is a h...
  • dt_yee
  • dt_yee
  • 2015年11月24日 12:35
  • 461

尼姆博弈 (附:HDU1850)

尼姆博弈: 有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。 这种情况与二进制有着很大的关系, 我们用(a,b,c)来表示某种局势, 那么(...
  • Eirlys_North
  • Eirlys_North
  • 2016年11月07日 10:02
  • 203

博弈论(巴什博奕,威佐夫博弈,尼姆博弈,斐波那契博弈)

一.  巴什博奕(Bash Game)   A和B一块报数,每人每次报最少1个,最多报4个,看谁先报到30。这应该是最古老的关于巴什博奕的游戏了吧。 其实如果知道原理,这游戏一点运气成分都没有,只和先...
  • AC_Gibson
  • AC_Gibson
  • 2014年11月30日 18:37
  • 4923

博弈论(一):Nim游戏(尼姆博弈)

重点结论:对于一个Nim游戏的局面(a1,a2,...,an),它是P-position当且仅当a1^a2^...^an=0,其中^表示位异或(xor)运算。 Nim游戏是博弈论中最经典的模型(之...
  • hdd871532887
  • hdd871532887
  • 2014年11月20日 21:18
  • 893

nyoj 取石子(三)(尼姆博弈的定理运用)

取石子(三) 时间限制:1000 ms |  内存限制:1000 KB 难度:6 描述 小王喜欢与同事玩一些小游戏,今天他们选择了玩取石子。 游戏规则如下:共有N堆石子,已知每堆中石子的数...
  • Ice_Alone
  • Ice_Alone
  • 2014年09月19日 00:42
  • 1499

阶梯博弈算法详解(尼姆博弈进阶)

1.什么是阶梯博弈? 阶梯的序号如图所示,地面表示第0号阶梯。每次都可以将一个阶梯上的石子向其左侧移动任意个石子,没有可以移动的空间时(及所有石子都位于地面时)输。 2.阶梯博弈的算法 阶梯博弈...
  • qq_30241305
  • qq_30241305
  • 2016年07月19日 16:03
  • 1310

博弈论——acm

序:博弈是信息学和数学试题中常会出现的一种类型,算法灵活多变是其最大特点,而其中有一类试题更是完全无法用常见的博弈树来进行解答。 寻找必败态即为针对此类试题给出一种解题思路。 此类问题一般有如下特点...
  • lgdblue
  • lgdblue
  • 2013年11月13日 10:38
  • 10366
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdu1850(尼姆博弈)
举报原因:
原因补充:

(最多只允许输入30个字)