Codeforces 1092D1. Great Vova Wall (Version 1)
传送门:https://codeforces.com/problemset/problem/1092/D1
题目大意:
我们需要判断是否可以,对一组数进行处理,通过对任意相邻且相等两数同时加一或对任意一个数加二,使得这些数的值都相同。
主要想法:
首先,因为只对一个数的操作不会改变它的奇偶性,但可以让它不断增加,所以我们只要考虑奇偶性即可。而对两个数的操作可以改变奇偶性,但它要求相邻两数的大小一致也就是奇偶性一致。
然后,我们开始考虑什么情况能够成立,就是当数组为 x x 型或x( )x、 ()x x型的嵌套的时候可以成立,看到这个,我们可以很容易联想到那个括号合法性的问题这两个问题其实本质上是一样的,都可以直接用栈解决。
代码实现:
#include <bits/stdc++.h>
using namespace std;
stack<int>a;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int b;
cin>>b;
if((!a.empty())&&0==(b+a.top())%2)a.pop();
else a.push(b);
}
if(a.size()>1)cout<<"NO"<<endl;
else cout<<"YES"<<endl;
return 0;
}
附带括号题的解法地址:https://blog.csdn.net/ydfy_/article/details/97113340