标签:
Description
Input
Output
Sample Input
3 5 7 9 0
Sample Output
1
飞神给弱讲题,瞬间技能加身,迅速get。
这道题,如果异或之后的sum值==0,那么先手必败,也就是0种可能,如果不等于零,在取优先状态下,先手必赢,那么到底有多少种情况呢?这就用到了异或运算里的公式,a^b^a=b.那就是你取完了之后让后手为先手是出于必败状态,x为去除当前a[i]的其余全部a[i]的抑或值,想要必败,则x^a[i]==0,即x==a[i],所以你只要找出x<a[i]的情况,就能保证你取完以后手为前手的时候必败。
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#include <set>
#include <queue>
#include <map>
typedef long long LL;
using namespace std;
LL a[110];
int main()
{
int n,i;
while(~scanf("%d",&n)){
if(!n) break;
for(i=0;i<n;i++)
scanf("%lld",&a[i]);
LL sum=0;
for(i=0;i<n;i++){
sum^=a[i];
}
if(sum==0){
printf("0\n");
}
else{
int cnt=0;
for(i=0;i<n;i++){
int x=sum^a[i];
if(x<a[i])
cnt++;
}
printf("%d\n",cnt);
}
}
return 0;
}
HDU 1850-Being a Good Boy in Spring Festival(尼姆博弈)
标签:
原文地址:http://blog.csdn.net/u013486414/article/details/44241741