塔台超频 - 最小超频电压算法详解及代码实现

问题描述

在一条笔直的马路上有 $n$ 个塔台,它们被依次标号为 $1, 2, \cdots, n$,分别处于距离马路起点 $a _ 1, a _ 2, \cdots, a _ n$($a _ 1 < a _ 2 < \cdots < a _ n$)的位置。

每个塔台初始时有一个通讯半径 $b _ 1, b _ 2, \cdots, b _ n$,这代表,对于 $i$ 号塔台,其可以与 $[a _ i - b _ i, a _ i + b _ i]$ 范围内的塔台通讯。

需要特别注意,对于两个塔台 A、B,当且仅当 A 塔台的位置处在 B 塔台的通讯范围内,B 塔台才能向 A 塔台传递信号。请注意这里不是「二者的通讯范围重合,即可通讯」。

现在你可以对这些塔台进行超频。具体的,你可以指定一个电压 $k$,之后所有塔台都会被加上 $k$ 的电压,通讯半径都会增大 $k$。这里的 $k$ 仅可为非负整数。

现在要求你通过超频,使信号可以从 $1$ 号塔台依次通过 $2, 3, \cdots$ 号塔台传输到 $n$ 号塔台,但是由于不合理的超频会较严重地磨损塔台,因此你想要尽可能降低超频的电压。

请你计算出,为了达到以上目的,塔台超频需要的最小电压是多少。

输入格式

输入共 $n + 1$ 行。

第一行为一个整数 $n$,代表塔台的数量。
接下来 $n$ 行,每行两个整数 $a _ i, b _ i$,分别代表各个塔台的位置和初始通讯半径。

输出格式

输出共一行一个整数,代表为了达到目的,塔台超频需要的最小电压。

样例 #1

样例输入 #1

5
0 4
2 2
3 1
12 8
19 2

样例输出 #1

8

提示

数据规模与约定

对于 $100%$ 的数据,保证 $2 \leq n \leq 5 \times 10 ^ 5$,$0 \leq a _ i, b _ i \leq 10 ^ 9$。

| 测试点编号 | 特殊限制 | | :----------: | :----------: | | $1 \sim 2$ | $n \leq 10$,$a _ i, b _ i \leq 200$ | | $3$ | $a _ i = i$ | | $4 \sim 5$ | $b _ i = 0$ | | $6$ | 所有 $b _ i$ 相同 | | $7 \sim 10$ | 无特殊限制 | cpp code.内容:```cpp #include #include #include

using namespace std;

int main() { int n; cin >> n;

vector<pair<int, int>> towers;
for (int i = 0; i < n; i++) {
    int a, b;
    cin >> a >> b;
    towers.push_back(make_pair(a, b));
}

sort(towers.begin(), towers.end());

int maxVoltage = 0;
int minVoltage = 0;
for (int i = 1; i < n; i++) {
    int distance = towers[i].first - towers[i-1].first;
    int radius = max(towers[i-1].second, towers[i].second);
    int voltage = max(0, distance - radius);
    maxVoltage = max(maxVoltage, voltage);
    minVoltage = max(minVoltage, voltage);
}

cout << minVoltage << endl;

return 0;

}


原文地址: https://www.cveoy.top/t/topic/pNtI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录