取石子游戏

来源:互联网 发布:java hadoop实例 编辑:程序博客网 时间:2024/05/17 02:13
#include<iostream> #include<set> #include<cstdio> using namespace std; const int MAXM=102; const int MAXH=10002; set<int>de; int dp[MAXH]; inline int sg(int cur) {     if(dp[cur]!=-1)     {         return dp[cur];     }     int i;     set<int>::const_iterator cp;     bool visited[MAXM];     memset(visited,0,sizeof(visited));     if(cur==0)     {         return dp[cur]=0;     }     bool tag=0;     for(cp=de.begin();cp!=de.end();cp++)     {         if(cur-*cp>=0)         {             int r;             if(dp[cur-(*cp)]!=-1)             {                 r=dp[cur-(*cp)];             }else            {                 r=sg(cur-(*cp));             }             if(r==0)             {                 tag=1;             }             //cout<<r<<" ";             visited[r]=1;         }else        {             break;         }     }     i=0;     int mex;     if(tag)     {         int j=0;         while(visited[j])         {             j++;         }         return dp[cur]=j;     }else    {         return dp[cur]=0;     } } int main() {     int k;     while(scanf("%d",&k)!=EOF)     {         memset(dp,-1,sizeof(dp));         de.clear();         if(k==0)         {             break;         }         int i;         for(i=0;i<=k-1;i++)         {             int s;             scanf("%d",&s);             de.insert(s);         }         int m;         scanf("%d",&m);         bool result[MAXM];         /*for(i=0;i<=10000;i++)         {             sg(i);         }*/        for(i=0;i<=m-1;i++)         {             int l;             scanf("%d",&l);             int j=0;             int sum=0;             for(j=0;j<=l-1;j++)             {                 int heap;                 scanf("%d",&heap);                 sum=sum^sg(heap);             }             if(sum)             {                 result[i]=1;             }else            {                 result[i]=0;             }           }         for(i=0;i<=m-1;i++)         {             if(result[i])             {                 printf("W");             }else            {                 printf("L");             }         }         printf("\n");     }     return 0; }

原创粉丝点击