求助20分!!!
查看原帖
求助20分!!!
808304
ZhengYuZhe_13楼主2024/8/7 20:36
#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!!

2024/8/7 20:36
加载中...