HDU 1536 SG函数
2013-02-26 10:20
155 查看
这题也是一道sg函数的模板题,没有任何变形,明确了允许移动的数目范围后可以用SG函数直接解决,记住SG要将S数组中的数从小到大排序。
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int k,num[120],f[10002];
int mex1(int p)
{
int i,t;
bool g[101]= {0};
for(i=0; i<k; i++)
{
t=p-num[i];
if(t<0)
break;
if(f[t]==-1)
f[t]=mex1(t);
g[f[t]]=1;
}
for(i=0;; i++)
if(!g[i])
return i;
}
int main()
{
while(~scanf("%d",&k),k)
{
memset(f,-1,sizeof(f));
f[0]=0;
for(int i=0; i<k; i++)
scanf("%d",&num[i]);
sort(num,num+k);
int n,m,s;
for(int i=1; i<=10000; i++)
f[i]=mex1(i);
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
s=0;
int x;
for(int i=0; i<m; i++)
scanf("%d",&x),s^=f[x];
if(s)
printf("W");
else
printf("L");
}
printf("\n");
}
return 0;
}
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int k,num[120],f[10002];
int mex1(int p)
{
int i,t;
bool g[101]= {0};
for(i=0; i<k; i++)
{
t=p-num[i];
if(t<0)
break;
if(f[t]==-1)
f[t]=mex1(t);
g[f[t]]=1;
}
for(i=0;; i++)
if(!g[i])
return i;
}
int main()
{
while(~scanf("%d",&k),k)
{
memset(f,-1,sizeof(f));
f[0]=0;
for(int i=0; i<k; i++)
scanf("%d",&num[i]);
sort(num,num+k);
int n,m,s;
for(int i=1; i<=10000; i++)
f[i]=mex1(i);
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
s=0;
int x;
for(int i=0; i<m; i++)
scanf("%d",&x),s^=f[x];
if(s)
printf("W");
else
printf("L");
}
printf("\n");
}
return 0;
}
相关文章推荐
- hdu 1536 SG函数模板题
- hdu 1536 S-Nim (简单sg函数)
- [ACM] hdu 1536 S-Nim(Nim组合博弈 SG函数打表)
- HDU_1536 S-Nim(SG函数)
- hdu 1536 S-Nim(SG函数)
- HDU 1536 SG函数模板
- hdu 1536/ hdu 1944 S-Nim(sg函数)
- HDU 1536 S-Nim 博弈求sg函数
- 博弈-sg函数的原理和优化(hdu-1536)
- hdu 1536、hdu 1944 S-Nim(博弈SG函数)
- hdu 1536 S-Nim(SG函数)
- 博弈-sg函数的原理和优化(hdu-1536)
- hdu 1536 S-Nim(SG函数)
- HDU 1536 S-Nim (博弈 sg函数 Nim和)
- HDU_1536 S-Nim(sg函数)
- HDU 1536 S-Nim 求SG函数
- hdu 1536 &&hdu1944 S-Nim (sg函数打表)
- hdu 1536 S-Nim(SG函数)
- hdu 1536 sg函数
- hdu 1536 SG函数模板题 千万注意游戏的组合用SG函数值异或 是SG函数的值啊