POJ 2234 Matches Game

题目大意:有N堆火柴,每堆火柴数告诉你,现在有两个玩家A,B,每个人每一个回合可以且仅可以在任意一堆里取出任意多根火柴(取的火柴数不能为0)

最后取完所有的火柴的人胜利,现在问你先取的人是赢还是输(两个人足够聪明)

分析:显然这是一道博弈论的题目。

当两堆的时候不难发现,两堆数量相同(达到平衡状态),那么先取的人必输。

当多堆的时候,有个平衡点,每个数对应一个二进制数(前面不足用0补上),如果N个数的个个位相加起来是偶数,那么该位是平衡位,如果所有的位都是平衡位,那么该状态为平衡状态。

好了,今天有点晚了,就不详细写了,直接贴上代码(不懂的地方可以评论,我会详解的):

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int n;
 5     while(scanf("%d",&n) !=EOF){
 6         int m,ans=0;
 7         while(n--){
 8             scanf("%d",&m);
 9             ans^=m;
10         }
11         if(ans) printf("Yes\n");
12         else printf("No\n");
13     }
14     return 0;
15 }
View Code

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值