题目描述:

有n堆石子,第i堆有Ai颗,两个人轮流取,每次必须从一堆中取走大于0颗石子,并且可以从这堆石子随便拿一些石子分到其它堆,数目不限(可以为0),但是已经没有石子的堆不能再被放入石子。谁取完谁赢,判断先取方是否有必胜策略。

题目分析:

BZOJ 1982: [Spoj 2021]Moving Pebbles 【另一类石子问题】
然而我并没有用高精度?
然而scanf会WA,用读入优化就算爆了也是相等的。
所以就水过了~

#include<cstdio>
#include<cctype>
#include<cstring>
#include<map>
#include<algorithm>
#define maxn 105
using namespace std;
template<class T>inline void read(T &a){
    char c;while(!isdigit(c=getchar()));
    for(a=c-'0';isdigit(c=getchar());a=a*10+c-'0');
}
int n,T,cnt;
map<int,bool>a;
int main()
{
    while(~scanf("%d",&n)){
        a.clear(),cnt=0;
        for(int i=1,x;i<=n;i++){
            read(x);
            if(a[x]) a[x]=0,cnt--;
            else a[x]=1,cnt++;
        }
        puts(cnt?"first player":"second player");
    }
}

相关文章: