poj 2960 S-Nim【SG函式】
阿新 • • 發佈:2018-12-03
預處理出SG函式,然後像普通nim一樣做即可
#include<iostream> #include<cstdio> using namespace std; const int N=10005; int k,s[N],m,n,sg[N],v[N],ti,ans; int read() { int r=0,f=1; char p=getchar(); while(p>'9'||p<'0') { if(p=='-') f=-1; p=getchar(); } while(p>='0'&&p<='9') { r=r*10+p-48; p=getchar(); } return r*f; } int main() { while(1) { k=read(); if(!k) break; for(int i=1;i<=k;i++) s[i]=read(); sg[0]=0; for(int i=1;i<=10000;i++) { ti++; for(int j=1;j<=k;j++) if(i-s[j]>=0) v[sg[i-s[j]]]=ti; for(int j=0;j<=10000;j++) if(v[j]!=ti) { sg[i]=j; break; } } m=read(); while(m--) { n=read(),ans=0; for(int i=1;i<=n;i++) ans^=sg[read()]; ans?printf("W"):printf("L"); } puts(""); } return 0; }