HDU 1536 S-Nim 求SG函数
2014-05-04 21:12
204 查看
题意:给你n个数Nnum[ i ],表示每次只能取Nnum[ i ]个数。
m个问题:每次给你 l 堆石子,每堆有num个石子,问先手是否会赢。
Sample Input
Sample Output
经典Nim游戏,找出SG就可以了。
至于如何找SG,这里有详细的 点我
m个问题:每次给你 l 堆石子,每堆有num个石子,问先手是否会赢。
Sample Input
2 2 5 3 2 5 12 3 2 4 7 4 2 3 7 12 5 1 2 3 4 5 3 2 5 12 3 2 4 7 4 2 3 7 12 0
Sample Output
LWW WWL
经典Nim游戏,找出SG就可以了。
至于如何找SG,这里有详细的 点我
#include<cstdio> #include<stdlib.h> #include<string.h> #include<string> #include<map> #include<cmath> #include<iostream> #include <queue> #include <stack> #include<algorithm> #include<set> using namespace std; #define INF 1e8 #define eps 1e-8 #define LL long long #define maxn 10005 #define PI acos(-1.0) int n,Nnum[110]; int sg[maxn]; void SG() { bool vis[maxn]; for(int j=1;j<maxn;j++) { memset(vis,false,sizeof(vis)); for(int i=0;i<n;i++) { if(j-Nnum[i]>=0) vis[sg[j-Nnum[i]]]=true; } for(int i=0;i<maxn;i++) if(!vis[i]) { sg[j]=i; break; } } } int main() { while(scanf("%d",&n)&&n) { for(int i=0;i<n;i++) scanf("%d",&Nnum[i]); SG(); int m; scanf("%d",&m); while(m--) { int l; scanf("%d",&l); int state=0; while(l--) { int num; scanf("%d",&num); state^=sg[num]; } if(state==0) printf("L"); else printf("W"); } printf("\n"); } return 0; }
相关文章推荐
- hdu 1536 S-Nim (SG函数经典题)
- hdu 1536 S-Nim(SG函数)
- hdu 1536 S-Nim|| poj 2960 S-Nim (sg函数)
- HDU 1536 && HDU 1944 S-Nim (Nim博弈、SG函数模板)
- hdu 1536 S-Nim(SG函数)
- hdu 1536 S-Nim(SG函数)
- HDU 1536 S-Nim (博弈 sg函数 Nim和)
- hdu 1536 S-Nim(SG函数)
- [ACM] hdu 1536 S-Nim(Nim组合博弈 SG函数打表)
- hdu 1536 S-Nim(SG函数)
- [ACM] hdu 1536 S-Nim(Nim组合博弈 SG函数打表)
- hdu 1536 S-Nim(SG函数)
- [ACM] hdu 1536 S-Nim(Nim组合博弈 SG函数打表)
- hdu 1536 S-Nim(SG函数)
- hdu 1536 &&hdu1944 S-Nim (sg函数打表)
- hdu1536 & 1944 S-NIM 博弈 SG函数
- hdu 1536 S-Nim(SG函数)
- HDU 1536 S-Nim [SG函数]【博弈】
- hdu 1536 S-Nim(SG函数)
- HDU 1536 S-Nim(sg函数)