这题我们只需要判断当前这个序列是否存在上一个字典序即可,这里可以用到一个叫做prev_permutation(a,a+n)的一个函数,它可以用来输出上一个序列,所以只需要用它判断一下是否存在上一个字典序即可,存在就输出它,否则输出ERROR。
代码如下:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,a[10000];
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
if(prev_permutation(a,a+n))
{
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
}
else
cout<<"ERROR";
return 0;
}
下方是原题的文字版:
题目描述
情人节到了,Uim打算给他的后宫们准备情人节礼物。UIm一共有N(1<=N<=9)个后宫妹子(现充去死 挫骨扬灰!)。
为了维护他的后宫的稳定。他通过编程,得出了一个送礼物的最佳顺序。这个我们管不着。
然而他认为,如果什么事情做得太圆满不是什么好事。于是他希望得到 原定顺序 的 前一个字典序的序列。
输入格式
第一行一个整数N
第二行N个整数,表示原定排列
输出格式
前一个排列
输入输出样例
输入 #1复制
3 1 3 2
输出 #1复制
1 2 3
说明/提示
若当前排列已经是第一个,则输出'ERROR'(引号不输出)
[del]骗分?嗯哼哼。。。[/del]