sg函数打表的基础应用,第一道ac的sg函数打表题纪念下,直接上代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 #define maxn 100 7 using namespace std; 8 #define N 10000 9 int k,visit[N],f[N],sg[N],nu; 10 void getsg(int n) 11 { 12 int i,j; 13 //memset(sg,0,sizeof(sg)); 14 for(i=0;i<=n;i++) 15 { 16 //memset(visit,0,sizeof(visit)); 17 for(j=0;j<=100;j++) 18 visit[j]=0; 19 for(j=0;j<nu;j++) 20 if(i>=f[j])visit[sg[i-f[j]]]=1; 21 else break; 22 for(j=0;j<=n;j++) 23 { 24 if(!visit[j]) 25 { 26 sg[i]=j; 27 break; 28 } 29 } 30 } 31 } 32 int main() 33 { 34 int i,j,ans,n,m; 35 while(scanf("%d",&nu)&&nu) 36 { 37 for(i=0;i<nu;i++) 38 scanf("%d",&f[i]); 39 sort(f,f+nu); 40 scanf("%d",&k); 41 getsg(10000); 42 43 while(k--) 44 { 45 ans=0; 46 scanf("%d",&m); 47 48 49 for(i=1;i<=m;i++) 50 { 51 scanf("%d",&n); 52 ans^=sg[n]; 53 } 54 if(ans==0) 55 printf("L"); 56 else 57 printf("W"); 58 59 } 60 printf(" "); 61 } 62 return 0; 63 }