HDU 3537 Daizhenyang's Coin

链接

[http://acm.hdu.edu.cn/showproblem.php?pid=3537]

题意

题意:已知一排硬币中有n个硬币正面朝上,输入正面朝上的硬币的位置ai。两人轮流操作,
每次操作可以翻转1,2,或则3枚硬币,其中翻转的最右的硬币必须是正面朝上的,最后不能翻转的为负

分析

妮姆博奕变形&&找规律

代码

#include<iostream>
#include<string.h>
#include<map>
using namespace std;
int sg[105];
bool vis[1000];
map<int,bool> ma;
void get_sg(){
    sg[0]=1;
    int i,j,k;
    for(i=1;i<=100;i++){
        memset(vis,0,sizeof(vis));
        vis[0]=1;
        for(j=0;j<i;j++) vis[sg[j]]=true;
        
        for(j=0;j<i;j++)
        for(k=0;k<j;k++)
        vis[sg[j]^sg[k]]=1;
           for(j=0;;j++)
            if(!vis[j]) break;
            sg[i]=j;
            cout<<i<<' '<<sg[i]<<endl;
    }
} 
bool jiou(int x){
    int cnt=0;
    while(x){
        if(x&1) cnt++;
        x>>=1;
    }
    if(cnt&1) return 1;
    else return 0;
}
int main(){
    //get_sg();
    int n,a;
    while(cin>>n){
        ma.clear();
        int ans=0;
        while(n--){
            cin>>a;
            if(!ma[a])
            {
                if(jiou(a)) ans^=2*a;
                else ans^=2*a+1;
                ma[a]=1;
            }
        }
        if(ans) cout<<"No\n";
        else cout<<"Yes\n";
    }
    return 0;
}
posted @ 2018-11-08 21:35  ChunhaoMo  阅读(166)  评论(0)    收藏  举报