Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 7262 Accepted Submission(s): 3074
1 /****************************** 2 code by drizzle 3 blog: www.cnblogs.com/hsd-/ 4 ^ ^ ^ ^ 5 O O 6 ******************************/ 7 #include<bits/stdc++.h> 8 #include<map> 9 #include<set> 10 #include<cmath> 11 #include<queue> 12 #include<bitset> 13 #include<math.h> 14 #include<vector> 15 #include<string> 16 #include<stdio.h> 17 #include<cstring> 18 #include<iostream> 19 #include<algorithm> 20 #pragma comment(linker, "/STACK:102400000,102400000") 21 using namespace std; 22 #define A first 23 #define B second 24 const int mod=1000000007; 25 const int MOD1=1000000007; 26 const int MOD2=1000000009; 27 const double EPS=0.00000001; 28 typedef __int64 ll; 29 const ll MOD=1000000007; 30 const int INF=1000000010; 31 const ll MAX=1ll<<55; 32 const double eps=1e-8; 33 const double inf=~0u>>1; 34 const double pi=acos(-1.0); 35 typedef double db; 36 typedef unsigned int uint; 37 typedef unsigned long long ull; 38 int k; 39 int sg[10005]; 40 int a[105]; 41 int flag[105]; 42 int q,m,exm; 43 void init() 44 { 45 sg[0]=0; 46 for(int i=1;i<=10000;i++) 47 { 48 memset(flag,0,sizeof(flag)); 49 for(int j=1;j<=k;j++) 50 { 51 if(i-a[j]>=0) 52 { 53 flag[sg[i-a[j]]]=1; 54 } 55 } 56 for(int j=0;;j++) 57 { 58 if(flag[j]==0){ 59 sg[i]=j; 60 break; 61 } 62 } 63 } 64 } 65 int main() 66 { 67 while(scanf("%d",&k)!=EOF) 68 { 69 if(k==0) 70 break; 71 for(int i=1;i<=k;i++) 72 scanf("%d",&a[i]); 73 init(); 74 scanf("%d",&q); 75 for(int i=1;i<=q;i++) 76 { 77 scanf("%d",&m); 78 int ans=0; 79 for(int j=1;j<=m;j++) 80 { 81 scanf("%d",&exm); 82 ans^=sg[exm]; 83 } 84 if(ans==0) 85 printf("L"); 86 else 87 printf("W"); 88 } 89 printf("\n"); 90 } 91 return 0; 92 }
原文:http://www.cnblogs.com/hsd-/p/6013438.html