← 返回

Luogu-P9455-入门赛-14-塔台超频-Hard-Version-题解

看到讨论区都是二分,实际上这道题用贪心来写非常简单

题目分析

首先将当前塔台的位置加上通讯距离(即 $a+b$ )看作为右边界,通过题目不难得出一个贪心策略:如果当前塔台 $i$ 能到达的最右边界比往后的塔台 $i+m$ 位置还要靠右,就可以忽略塔台 $i+1$ 到 $i+m$。转化一下,我们只需要每次记录可以到达的最右边界,如果当前塔台的位置不在最右边界的范围内,就可以更新答案取超频的最大值。 因此,我们可以用 $ans$ 来储存答案,$r$ 作为最右边界,计算过程就是:

if(a[i]>r)
{
	k=max(a[i]-r,k);
}
r=max(r,a+b);

因为是逐个处理,所以在输入时就可以完成计算,代码量极少。

Code

#include <bits/stdc++.h>
using namespace std;
int a, b, c, n, r, ans;
int main(){
    cin >> n;
    for (int i=0;i<n;i++){
        cin>>a>>b;
        if(a>r&&i){
            ans=max(ans,a-r);
        }
        r=max(r,a+b);
    }
    cout<<ans;
    return 0;
}

本文采用 CC BY-NC 4.0 许可协议,转载请注明出处并保持非商业用途。