#博弈论#Poj 1740 A New Stone Game

题目

两个人轮流操作,每次选择一个非空石堆后,
选择扔掉至少一个石子后可将剩余石子任意移动至其余非空石堆,
也可以不移,无石子可取者为败,问先手是否必胜


分析

感性理解一下,如果有两堆个数相同的石子,
那么在先手完成后,后手可以用同样的方式完成,
所以只要有一堆石子个数出现奇数次那么先手必胜


代码

#include <cstdio>
#include <cctype>
#include <algorithm>
#define rr register
using namespace std;
int n,c[101],ans; 
inline signed iut(){
	rr int ans=0; rr char c=getchar();
	while (!isdigit(c)) c=getchar();
	while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
	return ans;
}
signed main(){
	while (n=iut()){
		rr int ans=0;
		for (rr int i=0;i<101;++i) c[i]=0;
		for (rr int i=1;i<=n;++i) ++c[iut()];
		for (rr int i=1;i<101;++i) ans|=c[i]&1;
		putchar(ans+48),putchar(10);
	}
	return 0;
}
原文地址:https://www.cnblogs.com/Spare-No-Effort/p/14285291.html