标签:codeforce mem output title 一个 turn name 连续 cas
Array of integers is unimodal, if:
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).
Example
6
1 5 5 5 4 2
YES
5
10 20 30 20 10
YES
4
1 2 1 2
NO
7
3 3 3 3 3 3 3
YES
Note
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).
题目大意:给你一串数字问是不是unimodal(单峰的)。所谓unimodal就是数列前半部分严格单增,接下来是连续相等的数字,后面部分是严格单减的。例如 [5,?7,?11,?11,?2,?1]中[5,7,11]单增,[11,11]连续相等,[11,2,1]单减。
大致思路:开个数组,按照给出的条件简单模拟一下。先判断递增,模拟成功,计数器+1,不成功直接到下一个循环判断是否连续相等,不成功再跳到最后一个判断条件。如果是unimodal,那么会发现计数器会大于给出数组大小,详见代码。
#include<iostream> #include<cstdio> #include<cstring> #define maxn 105 using namespace std; int a[maxn]; int main() { int i,n; while(scanf("%d",&n)==1) { memset(a,0,sizeof(a));//因为1=<a[i]<=1000,所以初始化可以直接用0 for(i=0;i<n;i++) cin>>a[i]; int p=1; while(a[p]>a[p-1])//顺序要对 p++; while(a[p]==a[p-1]) p++; while(a[p]<a[p-1]) p++; if(p>n)//这里p只可能大于n或小于n cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }
CodeForces 831A Unimodal Array
标签:codeforce mem output title 一个 turn name 连续 cas
原文地址:http://www.cnblogs.com/FTA-Macro/p/7270703.html