第十二题(NOIP2018)
#include<iostream>
using namespace std;
const int N=110;
bool isUse[N];
int n,t;
int a[N],b[N];
bool isSmall(){
for(int i=1;i<=n;++i)
if(a[i]!=b[i])return a[i]<b[i];
return false;
}
bool getPermutation(int pos){
if(pos>n){
return isSmall();
}
for(int i=1;i<=n;++i){
if(!isUse[i]){
b[pos]=i;isUse[i]=true;
if(getPermutation(pos+1)){
return true;
}
isUse[i]=false;
}
}
return false;
}
void getNext(){
for(int i=1;i<=n;++i){
isUse[i]=false;
}
getPermutation(1);
for(int i=1;i<=n;++i){
a[i]=b[i];
}
}
int main(){
scanf("%d%d",&n,&t);
for(int i=1;i<=n;++i){
scanf("%d",&a[i]);
}
for(int i=1;i<=t;++i){
getNext();
}
for(int i=1;i<=n;++i){
printf("%d",a[i]);
if(i==n)putchar('\n');else putchar(' ');
}
return 0;
}
- 【判断题】若 (t=0) ,则输入的排列与输出的排列相同。
{{ select(1) }}
- 【判断题】此程序的功能是求出给定的排列的上t个排列。
{{ select(2) }}
- 【判断题】若将46行去掉,则输出效果不变。
{{ select(3) }}
- 【判断题】将32~34行去掉,则输出效果不变。
{{ select(4) }}
- 【选择题】该程序的时间复杂度为( )。
{{ select(5) }}
- O(nlogt)
- O(nt)
- O(nt²)
- O(n²ᵗ)
- 【选择题】若输入3 1 1 2 3,则输出( )。
{{ select(6) }}