hdu 1536——S-Nim
2014-09-17 19:52
162 查看
题意:几堆珠子,每次只能从一堆里去指定个,最后不能拿的那个人输。问先拿的人能否赢
思路:SG函数
代码如下:
思路:SG函数
代码如下:
#include<cstdio> #include<cstring> #include<iostream> #include<vector> #include<algorithm> using namespace std; int ks; int S[105]; int f[10005]; int h[105][105]; void SG(int x) { int sav[10005]; int tot=0; for(int i=0;i<=x;++i) { tot=0; for(int j=0;j<ks;++j) { if(i-S[j]>=0) { sav[tot++]=f[i-S[j]]; } } sort(sav,sav+tot); for(int j=0;j<tot;++j) { if(f[i]==sav[j])f[i]++; if(sav[j]>f[i])break; } } } int main() { // freopen("data.txt","r",stdin); while(scanf("%d",&ks)) { if(ks==0)break; for(int i=0;i<ks;++i) { scanf("%d",&S[i]); } memset(f,0,sizeof(f)); int m; scanf("%d",&m); int maxn=0; for(int i=0;i<m;++i) { scanf("%d",&h[i][0]); // cout<<"??"<<endl; for(int j=1;j<=h[i][0];++j) { // cout<<i<<' '<<j<<endl; scanf("%d",&h[i][j]); if(h[i][j]>maxn)maxn=h[i][j]; } } SG(maxn); for(int i=0;i<m;++i) { int g=0; for(int j=1;j<=h[i][0];++j) { g=g^f[h[i][j]]; } if(g==0)printf("L"); else printf("W"); } puts(""); } return 0; }
相关文章推荐
- hdu 1536 &&hdu1944 S-Nim (sg函数打表)
- Hdu 1536 S-Nim
- HDU 1536 S-Nim(组合游戏Nim)
- hdu 1536 S-Nim(SG函数)
- HDU 1536 S-Nim(博弈论)
- HDU 1536 S-Nim(SG博弈)
- HDU 1536 S-Nim(尼姆博弈)
- HDU 1536 && HDU 1944 S-Nim (Nim博弈、SG函数模板)
- 博弈论 ( Nim游戏+SG模板)——S-Nim ( HDU 1536 )
- HDU_1536 S-Nim(sg函数)
- HDU 1536 S-Nim
- HDU 1536 S-Nim(sg函数)
- HDU_1536 S-Nim(SG函数)
- hdu 1536 S-Nim(SG函数)
- hdu1536 S-Nim(博弈)
- HDU 1536 S-Nim
- hdu1536 hdu1944 S-Nim
- hdu 1536 S-Nim(SG函数)
- hdu 1536/1944 / POJ 2960 / ZOJ 3084 S-Nim 博弈论
- hdu1536 S-Nim(博弈)