思路:用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;
}