Home  >  Article  >  Web Front-end  >  codeforces Round #259(div2) BProblem Solution Report_html/css_WEB-ITnose

codeforces Round #259(div2) BProblem Solution Report_html/css_WEB-ITnose

WBOY
WBOYOriginal
2016-06-24 11:55:38936browse

B. Little Pony and Sort by Shift

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

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

22 1

output

input

31 3 2

output

-1

input

21 2

output

题目大意:

给出N个数字,可以每一次将最后一个数字移动到最前面,要求最终状态是一个单调非递减的序列,求最少需要花多少次操作。如若无法达到目标则输出“-1"。

解法:

也是一道很easy的编程基础题,找出两队单调非递减序列,分别为1~x 和 x 1~y,判断这两队是否覆盖整串数字,且a[n] <= a[1]。

更简单的一种做法就是,将a[1]~a[n]复制一遍,拓展到a[1]~a[2*n],然后在1 ~ 2*n里面找,是否有一串单调不递减的个数为n的序列。

代码:

#include #define N_max 123456int n, x, y, cnt;int a[N_max];void init() {	scanf("%d", &n);	for (int i = 1; i <= n; i++)  scanf("%d", &a[i]);}void solve() {	for (int i = 1; i <= n; i++)		if (a[i] > a[i+1]) {			x = i;			break;		}	if (x == n)		y = n;	else		for (int i = x+1; i <= n; i++)			if (a[i] > a[i+1]) {				y = i;				break;			}	if (x == n)		printf("0\n");	else if (y == n && a[y] <= a[1])		printf("%d\n", y-x);	else		printf("-1\n");}int main() {	init();	solve();}  

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn