A. Unimodal Array
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Array of integers is unimodal, if:
it is strictly increasing in the beginning;after that it is constant;after that it is strictly decreasing.The first block (increasing) and the last block (decreasing) may be absent. It is allowed that both of this blocks are absent.
For example, the following three arrays are unimodal: [5, 7, 11, 11, 2, 1], [4, 4, 2], [7], but the following three are not unimodal: [5, 5, 6, 6, 1], [1, 2, 1, 2], [4, 5, 5, 6].
Write a program that checks if an array is unimodal.
Input
The first line contains integer n (1 ≤ n ≤ 100) — the number of elements in the array.
The second line contains n integers a1, a2, ..., an (1 ≤ ai ≤ 1 000) — the elements of the array.
Output
Print "YES" if the given array is unimodal. Otherwise, print "NO".
You can output each letter in any case (upper or lower).
Examples
input
6 1 5 5 5 4 2output
YESinput
5 10 20 30 20 10output
YESinput
4 1 2 1 2output
Copy
NOinput
7 3 3 3 3 3 3 3output
YESNote
In the first example the array is unimodal, because it is strictly increasing in the beginning (from position 1 to position 2, inclusively), that it is constant (from position 2 to position 4, inclusively) and then it is strictly decreasing (from position 4 to position 6, inclusively).
给你一串数字,从左往右分为三部分,前一部分是严格递增的(没有相等),中间是最大值(最大值可以重复多次或者只有一次),后面是严格递减的(没有相等)。
模拟过程即可,第一次写的不够简洁,后面看别人的改的更简洁。
#include <cstdio> #include <string.h> const int MaxN = 105; int a[MaxN], n; int main() { while(~scanf("%d", &n)) { a[0] = 0; for(int i = 1; i <= n; i++) scanf("%d", a + i); bool flag = true, topOk = false; int top = 0; for(int i = 1; i <= n; i++) { if(!topOk) { if(a[i] <= a[i - 1]) { topOk = true; i--; } top = a[i]; } else { if((a[i] == a[i - 1] && a[i] != top) || a[i] > a[i - 1]) { flag = false; break; } } } printf("%s\n", flag ? "YES": "NO"); } }
简洁版
#include <cstdio> #include <string.h> const int MaxN = 105, INF = 0x3f3f3f3f; int a[MaxN], n; int main() { while(~scanf("%d", &n)) { for(int i = 0; i < n; i++) scanf("%d", a + i); a[n] = INF; int pos = 0; while(a[pos + 1] > a[pos]) pos++; while(a[pos + 1] == a[pos]) pos++; while(a[pos + 1] < a[pos]) pos++; printf("%s\n", pos < n - 1 ? "NO": "YES"); } }
