zoukankan      html  css  js  c++  java
  • 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();
        }
    
    }
    
  • 相关阅读:
    机器学习-正则化方法
    机器学习-回归算法
    机器学习算法一
    机器学习概览
    tensorflow机器学习初接触
    tensorflow决策树初接触
    tensorflow语法
    tensorflow第一个例子简单实用
    Hyperledger Fabric 1.0架构入门
    结合《XXXX需求征集系统》分析可用性和可修改性战术
  • 原文地址:https://www.cnblogs.com/waryan/p/14295160.html
Copyright © 2011-2022 走看看