博弈论水题列表

来源:互联网 发布:java研发工程师南昌 编辑:程序博客网 时间:2024/05/16 12:26

LA5059

刘汝佳上的经典题目,注意依题意sg[1]=1。

#include<iostream>#include<cstdlib>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;int sg[31];bool vst[31];int n=30;int main(){sg[0]=sg[1]=0;for(int i=2;i<=n;i++){memset(vst,0,sizeof vst);for(int j=1;j<=(i>>1);j++)vst[sg[i-j]]=true;for(int j=0;;j++)if(!vst[j]){sg[i]=j;break;}}for(int i=1;i<=n;i++)printf("%d ",sg[i]);return 0;}
#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>#include<algorithm>using namespace std;long long sg(long long x){return x&1?sg(x/2):x/2;}int main(){int T,n;scanf("%d",&T);while(T--){scanf("%d",&n);long long tmp=0;for(int i=1;i<=n;i++){long long a;scanf("%lld",&a);tmp^=sg(a);}printf("%s\n",tmp?"YES":"NO");}}


hdu1847 sg: 0 1 2 0 1 2 0 ...(0作为首项)

#include<iostream>#include<cstdlib>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int main(){int n;while(~scanf("%d",&n))printf("%s\n",n%3?"Kiki":"Cici");return 0;}

hdu2141

#include<iostream>#include<cstdlib>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;int n=10;bool win[300][300];int main(){for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){if(!win[i][j]){win[i+1][j]=win[i][j+1]=win[i+1][j+1]=true;}}for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(!win[i][j])printf("%d %d\n",i,j);return 0;}

#include<iostream>#include<cstdlib>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int main(){int n,m;while(~scanf("%d%d",&n,&m)&&n)printf("%s\n",(n-1)&1||(m-1)&1?"Wonderful!":"What a pity!");return 0;}


hdu1846

范围小一定要打表不然规律容易找错

#include<iostream>#include<cstdlib>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=1005;bool vst[maxn];int f[30];int is[maxn];int sg[maxn];void init(){f[0]=f[1]=1;      for(int i=2;i<=16;i++)          f[i]=f[i-1]+f[i-2];}void getsg(int n){sg[0]=0;for(int i=1;i<=n;i++){memset(vst,0,sizeof vst);for(int j=1;f[j]<=i;j++)vst[sg[i-f[j]]]=true;for(int j=0;;j++)if(!vst[j]){sg[i]=j;break;}}}int main(){init();getsg(1000);int x,y,z;while(~scanf("%d%d%d",&x,&y,&z)&&x)printf("%s\n",sg[x]^sg[y]^sg[z]?"Fibo":"Nacci");return 0;}

原创粉丝点击