B - Little Pony and Sort by Shift

2024-04-07 04:32
文章标签 little sort shift pony

本文主要是介绍B - Little Pony and Sort by Shift,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Submit  Status  Practice  CodeForces 454B

Description

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 Input

Input
2
2 1
Output
1
Input
3
1 3 2
Output
-1
Input
2
1 2
Output

0

这道题觉得非常水,但却一直wa,在训练赛的最后12提交过。。汗颜

思路:先将数组复制一遍放在接在数组后面,找到数组中最小的那个数在数组中出现的第一个位置,然后只要从他开始有连续的n个递增(前后相等也可),就可以。。。

第一次的代码:(思路比较智障)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int a[100005];
int main()
{int x;while(cin>>x){int max=0,t,t1,max1=0;for(int i=0; i<x; i++){scanf("%d",&a[i]);if(a[i]>max){max=a[i];t=i;}if(a[i]>=max1){max1=a[i];t1=i;}}for(int i=t;i<x;i++){if(a[i]!=max)break;else{t=i;}}int flag1=0,flag2=0,flag3=0,flag4=0;for(int i=1;i<t1;i++){if(a[i-1]>a[i])flag1=1;}for(int i=t1+2;i<x;i++){if(a[i-1]>a[i])flag2=1;}for(int i=1;i<t;i++){if(a[i-1]>a[i])flag3=1;}for(int i=t+2;i<x;i++){if(a[i-1]>a[i])flag4=1;}if(flag1==0&&flag2==0&&(a[x-1]<=a[0]||t1==x-1))printf("%d\n",x-1-t1);else{if(flag3==0&&flag4==0&&(a[x-1]<=a[0]||t==0))printf("%d\n",x-1-t);elseprintf("-1\n");}}return 0;
}




这篇关于B - Little Pony and Sort by Shift的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/881641

相关文章

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

stl的sort和手写快排的运行效率哪个比较高?

STL的sort必然要比你自己写的快排要快,因为你自己手写一个这么复杂的sort,那就太闲了。STL的sort是尽量让复杂度维持在O(N log N)的,因此就有了各种的Hybrid sort algorithm。 题主你提到的先quicksort到一定深度之后就转为heapsort,这种是introsort。 每种STL实现使用的算法各有不同,GNU Standard C++ Lib

C/C++经典排序问题,sort函数使用

目录 1. 前言 2. 正文 2.1 问题 2.2 解决办法 2.2.1 思路 2.2.2 代码实现 2.2.3 测试结果 3. 备注 1. 前言 大家在学习C语言的时候,是不是经常被排序算法折磨的很难那首,其实都是但是在C++中有专门的,排序函数,而且支持自定义排序算法。下面我就带大家看看,sort函数简单的数组排序中的应用。 2. 正文 2.1 问题 题目描述

Hive中order by,sort by,distribute by,cluster by的区别

一:order by order by会对输入做全局排序,因此只有一个Reducer(多个Reducer无法保证全局有序),然而只有一个Reducer,会导致当输入规模较大时,消耗较长的计算时间。关于order by的详细介绍请参考这篇文章:Hive Order by操作。 二:sort by sort by不是全局排序,其在数据进入reducer前完成排序,因此,如果用sort

list.sort实现根据对象的属性值对集合进行排序

list.sort实现根据对象的属性值对集合进行排序,如下所示List<Map<String,Object>> list = new ArrayList<>();Map<String,Object> map1 = new HashMap<>();map1.put("gz_id",1);map1.put("aaa","aaa");Map<String,Object> map2 = new H

HDU 1890 Robotic Sort

题意: 将一列数字排序  排序规则是  每次找到最小值的位置loc  将1~loc所有数字颠倒  然后删掉第一位  直到排好序  排序要求是稳定的 思路: 这题要做的是  寻找区间最小值位置  翻转区间  的操作  因此可以想到用splay 只需要每个节点记录一个small  就可以实现找到最小值位置 翻转区间操作就是将splay的超级头转到最上面使之成为根  再把loc转到根下面

Go-Sort(Cont)

倒序。 package mainimport ("fmt""sort")func main() {data := []string{"one", "two", "three", "four"}sort.Strings(data)fmt.Println(data) //[four one three two]sort.Sort(sort.Reverse(sort.StringSlice(data

sort对二维字符数组排序

转载自(http://blog.csdn.net/unimen/article/details/6843977) 由于二维字符数组的第二维没有赋值运算符,即不能对整个一维数组进行赋值,因此是无法直接对二维数组用sort进行排序的,解决办法有二种: 代码一: #include <iostream> #include <cstring> #include <algorithm> usin

Insertion Sort Integer Array Insertion Sort Linked List

Sort Integer Array using Insertion sort. //********************************************************************************************************/* Insertion Sort 原理:就是前面的sort部分全部是相对值,从后面拿一个元素,然后跟