您的位置:首页 > 编程语言 > C语言/C++

HDOJ2149反向SG函数

2015-08-24 22:08 369 查看
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;

static int m,n;
static int f[1200];
static int mex(int p)
{
bool g[1200]={0};
for (int i=1;i<=n;++i)
{
int t = p+i;
if (t>m)
break;
if (f[t]==-1)
f[t] = mex(t);
g[f[t]] = 1;
}
for (int i=0;i<=n;i++)
{
if (!g[i])
return i;
}
}
int main()
{
while(~scanf("%d %d",&m,&n))
{
memset(f,-1,sizeof(f));
bool g[1200]={0};
for (int i=1;i<=n;++i)
{
int t = i;
if (t>m)
break;
if (f[t]==-1)
f[t] = mex(t);
g[f[t]] = 1;
}
if (!g[0])
printf("none\n");
else
{
int ans[1200]={};
int cnt = 0;
for (int i=1;i<=n;i++)
if (!g[i])ans[cnt++] = i;
for (int i=0;i<cnt-1;++i)
printf("%d ",ans[i]);
printf("%d\n",ans[cnt-1]);
}

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  algorithm 算法 c++