zoj 3529 博弈SG
2013-07-13 21:17
477 查看
当NIM和X>0,此时必胜状态
使X的最左边的1存在的一堆石头,设为Y,操作它,就能必胜
因为
令Z=X ^ Y,消去最左边的1,则Z<Y,且Z ^ X ^ Y=0,说明此时为必败状态
使X的最左边的1存在的一堆石头,设为Y,操作它,就能必胜
因为
令Z=X ^ Y,消去最左边的1,则Z<Y,且Z ^ X ^ Y=0,说明此时为必败状态
#include <iostream> #include <cstdio> #include <cstring> using namespace std; #define N 100005 #define MAXN 50000 int a[N+100],b[N+100],n; int prime[MAXN+4],cnt,isprime[MAXN+5]; int cal(int obj) { int res=0; for(int i=0;prime[i]*prime[i]<=obj;++i) if(obj%prime[i]==0) { while(obj%prime[i]==0) { obj/=prime[i]; res++; } } if(obj>1) res++; return res; } int main () { for(int i=2;i<MAXN;++i) if(!isprime[i]) { prime[cnt++]=i; for(int j=i;j<MAXN;j+=i) isprime[j]=1; } int ncase=0; while(scanf("%d",&n)!=EOF) { int ans=0; for(int i=1;i<=n;++i) { scanf("%d",&a[i]); b[i]=cal(a[i]); ans^=b[i]; } if(ans) { int first=-1,y; for(int i=1;i<=n;++i) { if(b[i]> (ans^b[i])) { first=i; break; } } printf("Test #%d: Alice %d\n",++ncase,first); } else printf("Test #%d: Bob\n",++ncase); } return 0; }
相关文章推荐
- zoj 3529 Nim博弈
- zoj 3529 Nim博弈
- zoj 3529 Nim博弈
- zoj 3529 Nim博弈
- Zoj 3529 A Game Between Alice and Bob 数论+博弈Nim 快速求数中有多少个素数因子
- zoj 3529 Nim博弈
- ZOJ 3666 Alice and Bob(博弈 sg 函数入门)
- ZOJ 3529 A Game Between Alice and Bob 博弈好题
- zoj 3529 Nim博弈
- Zoj 3529 A Game Between Alice and Bob (数学_博弈)
- zoj 3529 Nim博弈
- zoj 3529 Nim博弈
- 博弈--ZOJ 3084 S-Nim(SG)
- zoj 3529 Nim博弈
- 博弈--ZOJ 3084 S-Nim(SG)
- zoj 3529 Nim博弈
- zoj 3529 Nim博弈
- zoj 3529 Nim博弈
- 尼姆博弈——ZOJ Problem Set - 3529
- zoj 3529 Nim博弈