Being a Good Boy in Spring Festival HDU - 1850(尼姆博弈)

Being a Good Boy in Spring Festival

题目链接:HDU - 1850

题意:m堆扑克,每堆ni张,两个人轮流取扑克,取到最后一张扑克的人赢, 规则如下:

每人可以挑任意一堆,选任意张扑克取走(当然也可以把这堆扑克全取走);

求出先手赢的第一步的可能方案数;

很明显, 这是个尼姆博弈;

n1^n2^n3^...^nm!=0的情况下先手胜;

#include <bits/stdc++.h>
using namespace std;
int m, num[110];
int main(){
	while(scanf("%d", &m), m){
		for(int i=0; i<m; i++){
			scanf("%d", &num[i]);
		}
		int temp=0;
		for(int i=0; i<m; i++){
			temp=temp^num[i];
		}
		int ans=0;
		if(temp){
			int res;
			for(int i=0; i<m; i++){
				res=num[i]^temp;
				if(res<num[i]) ans++;
			}
			printf("%d\n", ans);
		}
		else{
			printf("0\n");
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/sirius_han/article/details/80590212