题解 [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;
}
谢谢大家!