比赛 HAOI2009 模拟试题4 评测结果 AAAAAAAAAA
题目名称 排序集合 最终得分 100
用户昵称 zqzas 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2009-04-24 11:25:55
显示代码纯文本
#include <iostream>

#define MAXN 51

int N,K,f[MAXN],ans[MAXN];

void dp(int n,int k)
{
	if (k==1)
		return;
	int i;
	k--;
	for (i=1;i<=n;i++)
	{
		if (k<=f[n-i])
		{
			ans[++ans[0]]=i;
			dp(n-i,k);
			return;
		}
		k-=f[n-i];
	}
}

void run()
{
	dp(N,K);
}

void ini()
{
	scanf("%d%d",&N,&K);
	int i;
	f[0]=1;
	for (i=1;i<=N;i++)
		f[i]=f[i-1]*2;
}

void output()
{
	int i,last=0;
	if (ans[0]==0)
		printf("0");
	else
		for (i=1;i<=ans[0];i++)
		{
			printf("%d",ans[i]+last);
			last=ans[i]+last;
			if (i!=ans[0])
				printf(" ");
		}
}

int main()
{
	freopen("sort.in","r",stdin);
	freopen("sort.out","w",stdout);
	ini();
	run();
	output();
	return 0;
}