One day, Twilight Sparkle is interested in how to sort a sequence of integers a1, a2, ..., an in non-decreasing order. Being a young unicorn, the only operation she can perform is a unit shift. That is, she can move the last element of the sequence to its beginning:
a1, a2, ..., an → an, a1, a2, ..., an - 1.Help Twilight Sparkle to calculate: what is the minimum number of operations that she needs to sort the sequence?
The first line contains an integer n (2 ≤ n ≤ 105). The second line contains n integer numbers a1, a2, ..., an (1 ≤ ai ≤ 105).
If it's impossible to sort the sequence output -1. Otherwise output the minimum number of operations Twilight Sparkle needs to sort it.
2 2 1
1
3 1 3 2
-1
2 1 2
0
思路:刚开始思路就错了,只考虑相邻的三位数- -!,试数据的时候可以试出来错。
看有多少个a[i-1]>a[i],用S记下,然后用now分别记下当前数的下标。要移动(shift)的数就是n-now-1,然后看S的值,如果S==1,表示可能会有移动成为
#include<iostream> #include<cstring> #include<cstdio> #include<string> #include<cmath> #include<algorithm> #define LL int #define inf 0x3f3f3f3f using namespace std; int a[1000001]; int main() { int n,m,i,j;int k,x,y; while(~scanf("%d",&n)) { for(i=0;i<n;i++) { scanf("%d",&a[i]); } int s=0,now=0;//形成初始化习惯 for(i=0;i<n-1;i++) { if(a[i]>a[i+1]) { now=i;<span id="transmark"></span> s++; } } if(s==0) { printf("0\n"); continue; } else if(s==1&&a[0]>=a[n-1]) { printf("%d\n",n-now-1); } else { printf("-1\n"); } } return 0; }