HDU1536 SG函数

来源:互联网 发布:三国令神器进阶数据 编辑:程序博客网 时间:2024/06/07 16:39

分析:直接求出sg函数以后xor起来,最终答案是0就L否则W
注意vis不能全局定义。。

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using namespace std;int n,m;const int N=1e5+5;int sg[N],s[N];bool vis[110];inline int dfs(int x){    if (sg[x]!=-1)return sg[x];    bool vis[110];    memset(vis,0,sizeof(vis));    fo(i,0,n-1)    {        if (x>=s[i])        {            dfs(x-s[i]);            vis[sg[x-s[i]]]=1;        }    }    int ret;    for(int i=0;;i++)    if (!vis[i])    {        ret=i;        break;    }    return sg[x]=ret;}int main(){    while (scanf("%d",&n)&&n)    {        fo(i,0,n-1)scanf("%d",&s[i]);        memset(sg,-1,sizeof(sg));        sort(s,s+n);        scanf("%d",&m);        while (m--)        {            int t;            scanf("%d",&t);            int ans=0;            while (t--)            {                int num;                scanf("%d",&num);                ans^=dfs(num);            }            if (!ans)printf("L");            else printf("W");        }        printf("\n");    }    return 0;}
0 0
原创粉丝点击