Codeforces Round #259 (Div. 2) B. Little Pony and Sort by Shift
2016-03-01 22:09
627 查看
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.
Examples
Input
Output
Input
Output
Input
Output
0
题意:给你一个序列,问你只能把最后一个数移到第一个位置,问最少需要几次可将序列变成递增序列
思路:直接扫一遍,记录断点,查看分块是否是递增的即可,注意到最后检查是否能组成一个序列,若两部分都是递增,那么查看第二部分的最后一个数和第一部分第一个数的大小
ac代码:
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.
Examples
Input
2 2 1
Output
1
Input
3 1 3 2
Output
-1
Input
2 1 2
Output
0
题意:给你一个序列,问你只能把最后一个数移到第一个位置,问最少需要几次可将序列变成递增序列
思路:直接扫一遍,记录断点,查看分块是否是递增的即可,注意到最后检查是否能组成一个序列,若两部分都是递增,那么查看第二部分的最后一个数和第一部分第一个数的大小
ac代码:
#include<stdio.h> #include<math.h> #include<string.h> #include<stack> #include<set> #include<queue> #include<vector> #include<iostream> #include<algorithm> #define MAXN 1010000 #define LL long long #define ll __int64 #define INF 0xfffffff #define mem(x) memset(x,0,sizeof(x)) #define PI acos(-1) #define eps 1e-8 using namespace std; ll gcd(ll a,ll b){return b?gcd(b,a%b):a;} ll lcm(ll a,ll b){return a/gcd(a,b)*b;} ll powmod(ll a,ll b,ll MOD){ll ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;} //head int a[MAXN]; int main() { int n,i; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) scanf("%d",&a[i]); int k; int cnt=0; for(i=0;i<n;i++) { if(i==0) k=a[i]; else { if(a[i]>=k) k=a[i]; else { cnt=i; break; } } } int bz=0; for(int j=i;j<n;j++) { if(j==i) k=a[j]; else { if(a[j]>=k) k=a[j]; else { bz=1; break; } } } if(bz==0) { if(i!=n&&a[n-1]>a[0]) bz=1; } if(bz) printf("-1\n"); else printf("%d\n",(n-cnt)%n); } return 0; }
相关文章推荐
- C++利用函数调用实现数组数据的输入输出
- Android中使用Activity的权限进行启动验证
- 运算符重载
- 32位机和64位机下面各类型sizeof的大小
- MyEclipse使用总结——MyEclipse10安装SVN插件
- win7所有服务被禁用(应该是大多数被禁用)
- 配置struts2的默认后缀
- 【小笔记】afnetworking取数据时输入接口地址
- 斐波拉契快速求法:矩阵快速幂
- AnnotationTransactionAttributeSource is only available on Java 1.5 and highe
- Matlab小技巧
- 【清华集训2014】mex
- Java中日期的格式化
- PAT-A1031 Hello World for U (20)(模拟)
- 创业的第一百三十三天
- 如何在Maven和Gradle中配置使用Groovy 2.4与Spock 1.0
- 笔记
- java学习教程与笔记
- [android] 分析setting源代码获取SD卡大小
- ecshop与jquery冲突解决方案(绝对可行)