1. 程式人生 > >D1. Great Vova Wall (Version 1)

D1. Great Vova Wall (Version 1)

連結

[https://codeforces.com/contest/1092/problem/D1]

題意

給你n個位置牆的高度,現在你有2×1 磚塊,你可以豎直或者水平放置
問你是否可以使得所有位置高度一樣

思路

都在程式碼裡,看了你就恍然大悟了。。。仔細想想

程式碼

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,h;
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    //freopen("in.txt","r",stdin); 
    while(~scanf("%d",&n)){
        stack<int> stk;
        scanf("%d",&h);
        stk.push(h);
        for(int i=2;i<=n;i++)
        {
            scanf("%d",&h);
            if(stk.size()&&(h-stk.top())%2==0){//這裡很關鍵,因為對於相差2的倍數,
            //肯定是可以填磚使得二者高度相等,相等就可以去掉這兩個位置 
            //因為後面出現的位置總可以填磚使得與二者高度相等,
            //比如 554,先變成664,再變成666
            //或者338,直接加5塊磚變為888。。。 
                stk.pop();
            }
            else stk.push(h);
        }
        if(stk.size()<=1) printf("YES\n");
        else printf("NO\n");
    }
    return  0;
}