Description
emmm,还是北湖深坑,不用惊喜,不用意外。我们继续用石头填!
北湖的地面依旧是一维的,每一块宽度都为1,高度是非负整数,用一个数组来表示。
还是提供不限量的 1 * 2 规格的石头。
但是这一次是 DarkDawn 来填坑,他有很强烈的强迫症,所有的石头只能水平摆放(宽为2,高为1)。
问这样是否可以将北湖填平。(所有地面到达同一高度即为填平)
Input
样例有多组输入至文件末尾;每组用例占两行;
第一行输入1个整数 n 表示北湖地面总宽度;
第二行输入 n 个整数 a_ i 空格 ,用空格间隔,表示地面高度。
Output
若能填平则输出“YES”,否则输出“NO”。
样例
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
思路:
不允许竖直放置,也就是必须按真实高度处理。即使i列与栈顶高度相同也不一定能入栈。因为如果栈顶比栈顶前一个高,其实是不可能填平的,因为前一个是单独的,水平放不下,没有办法加高他。
代码:
#include<stdio.h>
#define N 200002
int stack[N];
//if(temp==stack[top]) top--;
//else stack[++top]=temp;
main()
{
int n,i,temp,top,max;
while((scanf("%d",&n))!=EOF){
top=-1;
max=0;
for(i=0;i<n;i++){
scanf("%d",&temp);
if(temp>max) max=temp;
if(top==-1) stack[++top]=temp;
else if(top==0&&temp==stack[top]) top--;
else if(temp==stack[top]&&temp<stack[top-1]) top--;
else stack[++top]=temp;
}
if(top==-1||top==0&&stack[top]>=max)
printf("YES\n");
else printf("NO\n");
}
}