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");}
}