codeforces contest 1092 -- D1 Great Vova Wall (Version 1)

 

click

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章