题解 [ABC276C] Previous Permutation

大家好,我是 CQ-C2024 蒟蒻 CJH。

题意

给出 $1$ 到 $N$ 的一个排列(保证不是字典序最小的排列),求它按照字典序的上一个排列。

分析思路

这一道题很明显就是使用全排列 STL prev_permutation 函数,此函数在 algorithm 库中,就可以求得上一个全排列。

拓展一下:next_permutation 函数可以求得下一个全排列。

函数原型:bool prev_permutation(_BidIt _First, _BidIt _Last)

以上两个函数当没有上一个/下一个时会返回 false

用法其实和 sort 函数是一样的,给定一个左闭右开的区间,找出这一段的全排列。

代码

//the code is from chenjh
#include<cstdio>
#include<algorithm>//函数在此库中
using namespace std;
int n,a[101];
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    prev_permutation(a+1,a+n+1);//求得上一个全排列。
    for(int i=1;i<=n;i++) printf("%d ",a[i]);
    return 0;
}

谢谢大家!

posted @ 2022-11-11 16:59  Chen_Jinhui  阅读(22)  评论(0)    收藏  举报  来源