填坑I
Description
又是北湖深坑,惊不惊喜,意不意外?!
Roark 觉得用水填湖太没意思了,用石头填坑多有意思。
假设北湖的地面还是一维的,每一块宽度都为1,高度是非负整数,用一个数组来表示。
现提供不限量的1×2规格的石头,问是否可以将北湖填平。(所有地面到达同一高度即为填平)
注:石头只能水平或垂直填放。
Input
样例有多组输入至文件末尾;
每组用例占两行;
第一行输入1个整数 n(1 ≤ n ≤ 2×10^5)表示北湖地面总宽度;
第二行输入 n 个整数 ai(0 ≤ ai ≤ 1e9),用空格间隔,表示地面高度。
Output
若能填平则输出“YES”,否则输出“NO”。
代码如下:
#include<cstdio>
#include<stack>
using namespace std;
const long maxn=200000+1;
long n,a[maxn],x;
int main()
{
while(scanf("%ld",&n)==1)
{
stack<long> s;
long i;
for(i=0;i<n;i++)
{
scanf("%ld",&a[i]);
}
s.push(a[0]);
for(i=1;i<n;i++)
{
if(!s.empty()&&(s.top()+a[i])%2==0) s.pop();
else s.push(a[i]);
}
x=s.size();
if(x==1||x==0) printf("YES\n");
else printf("NO\n");
}
}