Codeforces Round #259 (Div. 2) B. Little Pony and Sort by Shift

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?

Input

The first line contains an integer n (2 ≤ n ≤ 105). The second line contains n integer numbers a1, a2, ..., an (1 ≤ ai ≤ 105).

Output

If it's impossible to sort the sequence output -1. Otherwise output the minimum number of operations Twilight Sparkle needs to sort it.

Sample test(s)
Input
2
2 1
Output
1
Input
3
1 3 2
Output
-1
Input
2
1 2
Output
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;
}



你可能感兴趣的:(数论)