Codeforces 1092 D1 Great Vova Wall 题解

Codeforces 1092 D1 Great Vova Wall 题解

题目

原题原题链接

题意

一组数字,要求在经过水平和垂直增加高度后所有数值大小一致,不能阶跃式增加,必须递增(即题目要求的不能有空)。水平增加必须是相邻两个数且增加高度为一,垂直高度增加单位高度为2,只能影响一个数。


代码

#include <bits/stdc++.h>
using namespace std;

int main() {
    int i,n;
    cin>>n;
    stack<int> a;
    for (i=0;i<n;i++)
    {
        int temp;
        cin>>temp;
        if (!a.empty()&&abs((temp-a.top())%2==0))
            a.pop();
        else a.push(temp);
    }
    if (a.size()<=1)
        cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
    return 0;
}

思路

相邻两个数差值为偶数的话可以用垂直方式摆平,随后可以上升至任意高度,此时可以无所谓此对数据,可将其视为不存在,接着向下看,如果要满足整个数列高度一致,在此规则下,最后只能剩下一个以下的数没有达到一样的高度,否则将永远不可能达到一样的高度(永远差1)。可以用栈来表示这个过程,栈顶元素和比较元素每达成偶数差条件,退栈,否则将比较元素入栈,直到输入完成所有元素,若栈中元素<=1,输出YES,否则NO


总结

本题分数2100,如果发现了偶数差规律,利用栈的性质很快能解决。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值