• Educational Codeforces Round 101 (Rated for Div. 2)C. Building a Fence(思维+区间处理)


    C. Building a Fence

    题意

    给你n个基础高度和一个栅栏的长度k,如果建造这整个栅栏的过程可以满足所有规则,那么输出yes

    规则是:

    • 两个连续的相邻栅栏之间必须有长度为1的接触

    • 第一个和最后一个栅栏必须和地接触

    • 需要注意的是除了第一个和最后一个其他的栅栏也均不能超过地的高度大于(k-1)

    思路

    我们发现我们可以通过处理整个过程的最大高度和最小高度的所处区间来解决问题。

    (l)为当前的最小高度,(r)为当前的最大高度,当最小高度大于最大高度的时候输出no,然后我们在整个过程中的个更新方法是(l = max(l - k + 1, h[i]), r = min(r + k - 1 , h[i] + k - 1)),最后需要判断一下最后一个栅栏是否接地

    #include<bits/stdc++.h>
    
    using namespace std;
    const int N = 2e5 + 10;
    #define int long long
    int h[N], a[N], b[N];
    void solve() {
        int n, k; cin >> n >> k;
        for (int i = 1; i <= n; ++i) cin >> h[i];
        int l = 0, r = 0;
        int flag = 1;
        l = r = h[1];
        for (int i = 2; i <= n; ++i) {
            l = max(l - k + 1, h[i]);
            r = min(r + k - 1, h[i] + k - 1);
            if (l > r)flag = 0;
        }
        if (h[n] != l)flag = 0;
        if (flag) cout << "YES
    ";
        else cout << "NO
    ";
    
    }
    
    signed main() {
        int T = 1;
        cin >> T;
        while (T--) {
            solve();
        }
    
    }
    
  • 相关阅读:
    springboot 之JPA
    Oracle数据库安装
    Pytho之Django
    springboot之docker化
    opencv之dlib库人脸识别
    opencv之调用摄像头
    springboot之多模块化项目打包
    python学习笔记2--list
    ETL测试
    Mockserver -MOCO的使用
  • 原文地址:https://www.cnblogs.com/waryan/p/14295160.html
Copyright © 2020-2023  润新知