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;
 }

 

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