思路:用1*2的块能补成相邻差不超过1的序列;
用栈模拟,如果该数和栈顶元素同为奇数或同为偶数,则消去,最终栈内的元素<=1的才是YES
原因是如果是1122,则可以弄成2222, 如果是1001,先成为1111, 中间必是偶数个,所以可以11->22
为什么最后size为1的时候也可以呢,因为剩下1的情况必是元素个数是奇数个的时候,所以偶数个数两两组合每次可以+1,最终到达目标值。
#include<bits/stdc++.h>
using namespace std;
bool isMatch(int a, int b){
return (a&1)&&(b&1) || !(a&1) && !(b&1);
}
int main(){
int n;
scanf("%d", &n);
stack<int> s;
for(int i=0; i<n; i++){
int tmp;
scanf("%d", &tmp);
if(s.empty() || !isMatch(s.top(), tmp))
s.push(tmp);
else
s.pop();
}
if(s.size()<=1)
puts("YES");
else
puts("NO");
return 0;
}