POJ 2960

利用SG函数特性,和的SG函数等于单独SG函数的异或,然后对预处理SG函数

View Code
 1 #include<cstdio>

 2 #include<cstring>

 3 #include<algorithm>

 4 using namespace std;

 5 int sg[10005];

 6 bool mark[10005][105];

 7 int s[105];

 8 int main()

 9 {

10     int m;

11     while(scanf("%d",&m)&&m)

12     {

13         memset(mark,false,sizeof(mark));

14         for(int i=0;i<m;i++)

15             scanf("%d",s+i);

16         sg[0]=0;

17         for(int i=0;i<=10000;i++)

18         {

19             for(int j=0;j<=102;j++)

20             {

21                 if(!mark[i][j])

22                 {

23                     sg[i]=j;

24                     break;

25                 }

26             }

27             int tp=sg[i];

28             for(int j=0;j<m;j++)

29                 if(i+s[j]<=10000)

30                     mark[i+s[j]][tp]=true;

31 

32         }

33         scanf("%d",&m);

34         while(m--)

35         {

36             int flag=0;

37             int n,tp;

38             scanf("%d",&n);

39             while(n--)

40             {

41                 scanf("%d",&tp);

42                 flag^=sg[tp];

43             }

44             printf("%c",(flag!=0)?'W':'L');

45         }

46         printf("\n");

47     }

48     return 0;

49 }

你可能感兴趣的:(poj)