问题 B: Start up(2)!
时间限制: 1 Sec 内存限制: 2 MB提交: 1235 解决: 163
[ 提交][ 状态][ 讨论版]
题目描述
很高兴你能参加一年一度的NEUQ ACM程序设计竞赛。
只要A了这道题就有机会拿奖哦!快来拼手速A了我!
给出一个长度为n(n>1)的数组a,数组中的每个数都不相同,如果存在某个下标i满足
a[i]<a[i+1] i=0
a[i-1]>a[i]&&a[i]<a[i+1] 0<i<n-1
a[i]<a[i-1] i=n-1
则输出"YES",否则输出"NO".
输入
第一行一个整数N(1<N<=200000),表示数组有N个数.
第二行包含N个数,表示数组中每一项的值M.两个正整数之间会有一个空格,且0<=M<=2^31-1.
输出
如果满足上述条件输出"YES",否则输出"NO".
样例输入
6
6 1 2 3 5 4
样例输出
YES
题意不必细说。
题解:仔细读题,要求是:
如果存在某个下标i满足
a[i]<a[i+1] i=0
a[i-1]>a[i]&&a[i]<a[i+1] 0<i<n-1
a[i]<a[i-1] i=n-1
则输出"YES",否则输出"NO".
设一个变量pd来表示是否有符合条件的存在,0代表不存在,1代表存在。
for(int i=1;i<n;i++){
cin>>c;
if(i==1&&c>b)
pd=1;
if(i>1){
if(a>b&&b<c)
pd=1;
}
if(i==n-1)
if(c<b)
pd=1;
}
边输入边判断就OK。
AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<map>
#include<queue>
#include<string>
using namespace std;
int a,b,c;
int main(){
int n;
while(cin>>n){
int pd=0;
cin>>b;
for(int i=1;i<n;i++){
cin>>c;
if(i==1&&c>b)
pd=1;
if(i>1){
if(a>b&&b<c)
pd=1;
}
if(i==n-1)
if(c<b)
pd=1;
}
if(pd)
cout<<"YES\n";
else
cout<<"NO\n";
}
return 0;
}