题目大意:给出N,M。1~N的序列最小的是,1 2 3 4 ...N-1 N。第二小的是 1 2 3 4 ... N N-1。让你求出第M小的序列。
解题思路:如果有看过一个关于将全排列next_permutation的原理的博客,就会想到这就是全排列的方式,从最后开始,移动位,让这个数越来越变大。所以就很简单了。
ac代码:
#include <iostream>
#include <algorithm>
using namespace std;
int a[10005], n, m;
int main()
{
while (scanf("%d%d", &n, &m) != EOF){
for (int i=0; i<n; i++)
a[i] = i + 1;
for (int i=1; i<m; i++)
next_permutation(a, a+n);
for (int i=0; i<n; i++)
printf(i == n-1?"%d\n":"%d ", a[i]);
}
return 0;
}