记录编号 10037 评测结果 AAAAAAAAAA
题目名称 排序集合 最终得分 100
用户昵称 GravatarBYVoid 是否通过 通过
代码语言 C++ 运行时间 0.003 s
提交时间 2009-04-24 11:34:16 内存使用 0.26 MiB
显示代码纯文本
/* 
 * Problem: HAOI2009 模拟4 sort
 * Author: Guo Jiabao
 * Time: 2009.4.24 11:12
 * State: Solved
 * Memo: 递推 + 模拟
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
const int MAXN=32;
using namespace std;
int N,K;
int F[MAXN],use[MAXN];
void init()
{
	freopen("sort.in","r",stdin);
	freopen("sort.out","w",stdout);
	scanf("%d%d",&N,&K);
}
void dynamic()
{
	int i;
	F[0]=0;
	for (i=1;i<=N;i++)
		F[i]=(F[i-1]*2)+1;
}
void dfs(int l,int k)
{
	if (k==0 || l==0)
		return;
	int p=F[l-1]+1;
	if (k<=p)
	{
		use[N-l+1]=1;
		dfs(l-1,k-1);
    }
	else
		dfs(l-1,k-p);
}
void print()
{
	int i;
	for (i=1;i<=N;i++)
		if (use[i])
			printf("%d ",i);
}
int main()
{
	init();
	dynamic();
	if (K>1)
	{
		dfs(N,K-1);
		print();
	}
	else
		printf("0");
	return 0;
}