算法设计与分析—分治 Ignatius and the Princess II (全排列)

Now our hero finds the door to the BEelzebub feng5166. He opens the door and finds feng5166 is about to kill our pretty Princess. But now the BEelzebub has to beat our hero first. feng5166 says, “I have three question for you, if you can work them out, I will release the Princess, or you will be my dinner, too.” Ignatius says confidently, “OK, at last, I will save the Princess.”

“Now I will show you the first problem.” feng5166 says, “Given a sequence of number 1 to N, we define that 1,2,3…N-1,N is the smallest sequence among all the sequence which can be composed with number 1 to N(each number can be and should be use only once in this problem). So it’s easy to see the second smallest sequence is 1,2,3…N,N-1. Now I will give you two numbers, N and M. You should tell me the Mth smallest sequence which is composed with number 1 to N. It’s easy, isn’t is? Hahahahaha…”
Can you help Ignatius to solve this problem?

Input
The input contains several test cases. Each test case consists of two numbers, N and M(1<=N<=1000, 1<=M<=10000). You may assume that there is always a sequence satisfied the BEelzebub’s demand. The input is terminated by the end of file.

Output
For each test case, you only have to output the sequence satisfied the BEelzebub’s demand. When output a sequence, you should print a space between two numbers, but do not output any spaces after the last number.

Sample Input
6 4
11 8

Sample Output
1 2 3 5 6 4
1 2 3 4 5 6 7 9 8 11 10

不翻译还真不知道是勇士闯入了魔兽大门营救公主(ノ ̄▽ ̄)
这魔兽出题了,问勇士能不能求出1~n的第m个全排列
此处深感到之前学会的next_permutation()函数的好处

下面是AC代码:

#include <iostream>
#include <algorithm>
#include <cstring> 
using namespace std;
int a[1001];
int main(){
	int n,m; //一共n个数,第m个序列 
	while(scanf("%d %d",&n,&m)!=EOF){
		memset(a,0,sizeof(a));
		for(int i=0;i<n;i++)
			a[i]=i+1;
		while(--m)
			next_permutation(a,a+n);
		for(int i=0;i<n-1;i++)
			printf("%d ",a[i]);
		printf("%d",a[n-1]);
		printf("\n");
	}
	return 0;
}

这个题注意两点:
1.一开始是对数组下标1-n赋值,怎么都没对,之后改成对0-n-1赋值就可以了,初步觉得是函数对a-a+n范围全排列牵扯数组下标0有些问题。
2.注意不要pe,做什么题都要看清格式,也是英文题有干扰一下吧,后面没有空格就不要写啦

发布了37 篇原创文章 · 获赞 0 · 访问量 380

猜你喜欢

转载自blog.csdn.net/weixin_45351699/article/details/104736645