8. 奇葩的排序
题目ID:3288必做题100分
最新提交:
Wrong Answer
60 分
历史最高:
Wrong Answer
90 分
时间限制: 1000ms
空间限制: 32768kB
题目描述
给你n个数a1,a2,a3,…,an,现要将其排成非递减的顺序,对于当前你每次可以做如下操作
a1,a2,a3,…,an→an,a1,a2,a3,…,an−1
现在问你最少需要操作几次使得序列变成非递减。
输入格式
第一行先输入一个整数n
第二行输入n个整数
输出格式
输出一个整数,表示最少的操作次数
如果无法使得序列变成非递减,输出-1
样例
Input 1
6 4 5 6 1 2 3
Output 1
3
样例解释
这里可以通过操作将序列变为1 2 3 4 5 6,需要三次操作
数据范围
2<=n<=10^5, 1<=ai<=10^5
#include<bits/stdc++.h>
using namespace std;
int n,a[100010];
int main(){
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
int x1,x2;
for(x1=0;x1<n&&a[x1]<=a[x1+1];x1++);
for(x2=n-1;x2>=0&&a[x2]>=a[x2-1];x2--);
if(x2-x1==1||x2<x1) cout<<n-(x1+1);
else cout<<"-1";
return 0;
}
下载了一下错误数据:
3
1 3 2
加了特盘:
#include<bits/stdc++.h>
using namespace std;
int n,a[100010];
int main(){
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
int x1,x2;
for(x1=0;x1<n&&a[x1]<=a[x1+1];x1++);
for(x2=n-1;x2>=0&&a[x2]>=a[x2-1];x2–);
if(x2-x1==1&&a[n-1]<a[0]||x2<x1) cout<<n-(x1+1);
else cout<<“-1”;
return 0;
}
分更低了QAQ