题目
两个人轮流操作,每次选择一个非空石堆后,
选择扔掉至少一个石子后可将剩余石子任意移动至其余非空石堆,
也可以不移,无石子可取者为败,问先手是否必胜
分析
感性理解一下,如果有两堆个数相同的石子,
那么在先手完成后,后手可以用同样的方式完成,
所以只要有一堆石子个数出现奇数次那么先手必胜
代码
#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;
}