博弈论—— Being a Good Boy in Spring Festival HDU - 1850

这里写图片描述
这里写图片描述
题解:
如果所有牌的亦或和为0,必输。想赢必须亦或和大于0,亦或完之后如果大于零,要是让对手输必须拿走一些牌使得剩余牌亦或结果为0,如果一个数字比除这个数字之外的数字的亦或值大,则情况就+1,举个例子,比如5,7,9这个例子,只有9大于5和7的亦或值,所以结果就为1.

#include<iostream>
#include<cstdio>
#include<map>
#include<algorithm>
#include<cmath>
#define LL long long int
using namespace std;
int main()
{
    int m,a[105];
    while(~scanf("%d",&m)&&m)
    {
        int sum = 0,cnt = 0;
        for(int i = 0 ; i < m ; i++)
        {
            scanf("%d",&a[i]);
            sum^=a[i];
        }
        for(int i = 0 ; i < m ; i++)
        {
            if(a[i]>(sum^a[i]))
            cnt++;
        }
        if(sum)
        cout<<cnt<<endl;
        else
        cout<<0<<endl;
    }
    return 0;
} 

猜你喜欢

转载自blog.csdn.net/qq_40240576/article/details/82662865