HDU 3537 Daizhenyang's Coin
阿新 • • 發佈:2018-11-08
連結
[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; }