#10753. 数论第十二题(NOIP2018)

数论第十二题(NOIP2018)

第十二题(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;
}
  1. 【判断题】若 (t=0) ,则输入的排列与输出的排列相同。
    {{ select(1) }}
  • 正确
  • 错误
  1. 【判断题】此程序的功能是求出给定的排列的上t个排列。
    {{ select(2) }}
  • 正确
  • 错误
  1. 【判断题】若将46行去掉,则输出效果不变。
    {{ select(3) }}
  • 正确
  • 错误
  1. 【判断题】将32~34行去掉,则输出效果不变。
    {{ select(4) }}
  • 正确
  • 错误
  1. 【选择题】该程序的时间复杂度为( )。
    {{ select(5) }}
  • O(nlogt)
  • O(nt)
  • O(nt²)
  • O(n²ᵗ)
  1. 【选择题】若输入3 1 1 2 3,则输出( )。
    {{ select(6) }}
  • 1 2 3
  • 1 3 2
  • 2 1 3
  • 3 2 1