[ACM]星宿归位(排序)
来源:互联网 发布:用java求最小公倍数 编辑:程序博客网 时间:2024/04/25 14:48
定义一种名为星宿归位的操作:将数列中最后一个元素移动至数组中的第一位,并将原来的第一位及后面的数字依次后移。
大自然中有许多数列可以只通过星宿归位使其变成递增(非严格)的数列。
那么问题来了,给定一个数列,请你辅助山舞泣判断,是否可以只通过星宿归位将其变为递增(非严格)数列。如果可以请计算最少需要多少次星宿归位。
Input
多组输入数据。
每组数据第一行为一个整数n(1<=n<=100000),表示数列中数字的个数,第二行为n个数字。
Output
对每组输入数据,输出一行,包含一个整数,表示至少需要多少次操作才能获得递增(非严格)的数列
Sample Input
2
2 1
3
1 3 2
2
1 2
1
8
Sample Output
1
-1
0
0
#include<iostream>using namespace std;bool judge(int n, int a[]){for (int i = 0; i < n - 1; i++){if (a[i] != a[i + 1])return false;}return true;}int main(){int n;while (cin >> n){int *a = new int[2 * n];for (int i = 0; i < n; i++)//构建数组{cin >> a[i];a[n + i] = a[i];}int position = 0;//初始化各个变量int length = 1;int MAXLEN = 1;int MAXPOS = 0;for (int i = 0; i < 2 * n - 1; i++)//寻找最大连续上升序列{if (a[i] <= a[i + 1]){length++;position = i + 1;}if (a[i] > a[i + 1]) length = 1;//复位if (MAXLEN <= length)//更新最大值{MAXLEN = length;MAXPOS = position;}}if (n == 1 || judge(n, a)) {cout << 0 << endl;}else if (MAXLEN == n)cout << 2 * n - MAXPOS - 1 << endl;else cout << -1 << endl;}return 0;}
0 0
- [ACM]星宿归位(排序)
- 冒泡排序 acm(收藏)
- acm: 排序--快速排序(2/2)
- 第一章 大神归位
- ACM排序
- ACM 排序
- 徘徊于斗牛之间 —— 星象、星宿与星座(风水)
- 二十八星宿图
- ACM详解(5)——排序
- ACM详解(5)——排序
- acm--字符串排序(指针和引用)
- ACM(004)ASCII码排序(2)
- ACM解题--(1)ASCII码排序
- 九度OJ 1339:ACM (排序)
- 百练之时钟归位
- 一世星宿因果论断表
- acm 试题 字符串排序
- 【ACM模板】堆排序
- 如何高效利用时间学习?
- android 学习之触摸事件 -- 认识MotionEvent
- 通向企业级的 OPENSTACK 网络服务
- C 数组指针和指针数组的区别
- 在C++中调用Python接口
- [ACM]星宿归位(排序)
- Linux安装JAVA(使用wget下载JDK--跳过accept licence)
- C++:基于LL(1)方法的语法分析程序-2
- poj 2083 Fractal
- 配置Vim的Markdown环境
- 常用框架
- OpenGL ES概述
- LeetCode 6 : ZigZag Conversion (Java)
- (七十二)while循环