码迷,mamicode.com
首页 > 编程语言 > 详细

HDU1850 Being a Good Boy in Spring Festival

时间:2015-06-03 10:01:05      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

解题报告:题目的意思很简单!就是一个Nim博弈!但是不是问谁获胜,本题而是问的获胜的方法有多少种!首先,我们必须知道,因为是起手,对于M堆扑克,最多有M种获胜的方法!对res = M1 ^ M2 ^ M3 …. ^ Mm取异或(^)得res,由异或的性质知:res ^ Mi = ( M1 ^ M2 …^M(i-1) ^ M(i+1) ^ … ^Mm ) 也就是说res对任意一个数取^可以的得到其他所有数的^值,例如:5 7 95^7^9=0101^0111^1001=1011=11;那么11^5=1011^0101=1110=0111^1001=14;那么要保证先手取后剩余局势处于必败点,那么只有保证在这5张牌的牌堆里取出一些牌后,可以使得x^1110=0x=1110=14那么也就是说这个牌堆数必须大于14才有可能达到这种状态;现在只有5张牌,显然不能,而对于牌堆9,有(res^9=0010=29显然大于2,所以只需要拿走7张牌就可以让局势处于必败点!
<pre name="code" class="cpp">#include<cstdio>
#define N 105
int a[N];
int main()
{
    int n,i,ans,res;
    while(scanf("%d",&n)!=EOF&&n){
        res=0;
        for(i=0;i<n;i++){
            scanf("%d",&a[i]); res=res^a[i];
        }
        ans=0;
        for(i=0;i<n;i++){
            if(a[i]>(res^a[i])) ans++;
        }
        printf("%d\n",ans);
    }
    return 0;
}


HDU1850 Being a Good Boy in Spring Festival

标签:

原文地址:http://blog.csdn.net/a197p/article/details/46336235

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!