奇葩的排序20分

题目

题目描述

给你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 main(){
  int n,b;
  deque<int>a;
  cin>>n;
  for(int i=0;i<n;i++){
    cin>>b;
    a.push_back(b);
  }for(int i=0;i<n;i++){
    b=1;
    for(int j=0;j<n-1;j++){
      if(a[j]>a[j+1]){
        b=0;
        break;
      }
    }if(b){
      cout<<i;
      return 0;
    }a.push_back(a.front());
    a.pop_front();
  }cout<<-1;
  return 0;
}

#3#4#6#8#10WA,#5#7#9TLE

1 个赞

没有权限查看,建议把图放出来

1 个赞

去掉contest/747003D6600053401A35FF6/就行了。

1 个赞

@张乐凡 会404

1 个赞

那发个截图吧。
或者把题面复制过来再改一下排版也行。

不是发了吗

对不起,我眼瞎。