全排列问题,请教如何修改?
问题是pta上 四个超时 两个正确。。
Lc今天上课学会了数的全排列并且Lc觉得数的全排列很简单,但是直到Lc的同桌YooQ向他提出了一个问题,该问题的描述如下:我们知道n的全排列总共有n!个序列,例如2的全排列有两个序列{1,2}和{2,1},现在你要解决的问题是n的全排列的n!个序列中第m个序列是什么?(注意:n的全排列的n!个序列是按字典序由小到大排序的)
输入格式:
第一行为样例组数t(t≤1e5),接下来t行每行有一个整数n和m(1<=n<=20,1<=m<=n!)
输出格式:
输出t行,每行输出n的全排列的n!个序列中第m个序列,两相邻的数间有一空格,行末不得有多余空格。
#include
using namespace std;
const int N=100;
int n,m,cnt;
int take[N];
bool st[N];
void dfs(int k){
int i;
if(k==n+1){
cnt++;
if(cnt==m){
for(i=1;i" ";
}
cout<else{
for(int j=1;j<=n;j++){
if(st[j]==0){
take[k]=j;
st[j]=1;
dfs(k+1);
st[j]=0;
}
}
}
}
int main(){
int t;
cin>>t;
while(t--){
cin>>n>>m;
dfs(1);
cnt=0;
for(int i=0;i0;
st[i]=0;
}
}
}