#include<bits/stdc++.h>
using namespace std;
struct stu{
int array[10005];
}a[10005];//记录所有全排列
int n,m;
int pos;//第几个全排列
int now[10005];//给出的排序
int p[10005];//全排列的每次排列顺序
bool flag[10000];
void dfs(int n,int step){//数字和第几步
if(step>n){
pos++;//标记+1
for(int i=1;i<=n;i++){
a[pos].array[i]=p[i];
}//记录排列顺序
return;
}//排列结束
for(int i=1;i<=n;i++){
if(!flag[i]){//如果没被标记
p[step]=i;//记录
flag[i]=1;//标记
dfs(n,step+1);//下一步
flag[i]=0;//回溯
}
}//找n次
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>now[i];
}//输入顺序
dfs(n,1);//计算全排列
int record;
for(int i=1;i<=pos;i++){
bool flag=1;//立flag(*^▽^*)
for(int j=1;j<=n;j++){
if(a[i].array[j]!=now[j]){//如果不一样
flag=0;//记录并跳出
break;
}
}
if(flag){
record=i;//记录下位置
break;//跳出
}
}
record+=m;//加上m
for(int i=1;i<=n;i++){
cout<<a[record].array[i]<<' ';
}//输出排列顺序
return 0;
}
/*
题意化简:
告诉你全排列的数目n,以及现在整数的顺序,
求出往下继续m次全排列的排列顺序,
<---------------------------------->
3的全排列:
1 2 3 ---1
1 3 2 ---2
2 1 3 ---3
2 3 1 ---4
3 1 2 ---5
3 2 1 ---6
排列顺序:1 3 2
加上:2
改变后:2 3 1
*/
求助!! 1,3绿灯,其他全部MLE!!