sg函数 poj 2960 S-Nim

来源:互联网 发布:淘宝买电动车哪家 编辑:程序博客网 时间:2024/05/22 13:42
#include <iostream>#include <cstdio>#include <cstring>#include <climits>using namespace std;int S[110];int S_len = 0;int sg[10050] = {0};bool flag[10050] = {0};int DFS(int state){    if ( sg[state] != INT_MIN)  return sg[state];    for (int i = 0;i < S_len;++i){        if (state < S[i])  continue;        flag[ DFS(state - S[i]) ] = 1;    }    for (int i = 0;i < 10050;++i)        if ( !flag[i] )            return sg[state] = i;}void init(){    fill(sg,sg+10050,INT_MIN);    for (int i = 1; i < 10050;++i){        memset(flag,0,sizeof(flag));        sg[i] = DFS(i);    }}int main(){    string str;    while(scanf("%d",&S_len) != EOF && S_len){        for (int i = 0;i < S_len;++i)            scanf("%d",S+i);        init();        int kase = 0;        scanf("%d",&kase);        str = "";        int l,ans = 0,x;        while(kase--){            ans = 0;            scanf("%d",&l);            while(l--){                scanf("%d",&x);                ans ^= sg[x];            }            str += ans ? "W":"L";        }        printf("%s\n",str.c_str());    }    return 0;}

0 0