塔台超频 - 最小超频电压计算
{"title":"# 塔台超频\n\n## 题目描述\n\n在一条笔直的马路上有 $n$ 个塔台,它们被依次标号为 $1, 2, \cdots, n$,分别处于距离马路起点 $a _ 1, a _ 2, \cdots, a _ n$($a _ 1 < a _ 2 < \cdots < a _ n$)的位置。\n\n每个塔台初始时有一个通讯半径 $b _ 1, b _ 2, \cdots, b _ n$,这代表,对于 $i$ 号塔台,其可以与 $[a _ i - b _ i, a _ i + b _ i]$ 范围内的塔台通讯。\n\n需要特别注意,对于两个塔台 A、B,当且仅当 A 塔台的位置处在 B 塔台的通讯范围内,B 塔台才能向 A 塔台传递信号。请注意这里不是「二者的通讯范围重合,即可通讯」。\n\n现在你可以对这些塔台进行超频。具体的,你可以指定一个电压 $k$,之后所有塔台都会被加上 $k$ 的电压,通讯半径都会增大 $k$。\n\n现在要求你通过超频,使信号可以从 $1$ 号塔台依次通过 $2, 3, \cdots$ 号塔台传输到 $n$ 号塔台,但是由于不合理的超频会较严重地磨损塔台,因此你想要尽可能降低超频的电压。\n\n请你计算出,为了达到以上目的,塔台超频需要的最小电压是多少。\n\n## 输入格式\n\n输入共 $n + 1$ 行。\n\n第一行为一个整数 $n$,代表塔台的数量。 \n接下来 $n$ 行,每行两个整数 $a _ i, b _ i$,分别代表各个塔台的位置和初始通讯半径。\n\n## 输出格式\n\n输出共一行一个整数,代表为了达到目的,塔台超频需要的最小电压。\n\n## 样例 #1\n\n### 样例输入 #1\n\n\n5\n0 4\n2 2\n3 1\n12 8\n19 2\n\n\n### 样例输出 #1\n\n\n8\n\n\n## 提示\n\n### 数据规模与约定\n\n对于 $100% $ 的数据,保证 $2 \leq n \leq 5 \times 10 ^ 5$,$0 \leq a _ i, b _ i \leq 10 ^ 9$。\n\n| 测试点编号 | 特殊限制 |\n| :----------: | :----------: |\n| $1 \sim 2$ | $n \leq 10$,$a _ i, b _ i \leq 200$ |\n| $3$ | $a _ i = i$ |\n| $4 \sim 5$ | $b _ i = 0$ |\n| $6$ | 所有 $b _ i$ 相同 |\n| $7 \sim 10$ | 无特殊限制 |cpp code内容:cpp\n#include <iostream>\n#include <vector>\n#include <algorithm>\n\nusing namespace std;\n\nint main() {\n int n;\n cin >> n;\n \n vector<pair<int, int>> towers(n);\n for (int i = 0; i < n; i++) {\n cin >> towers[i].first >> towers[i].second;\n }\n \n sort(towers.begin(), towers.end());\n \n int minVoltage = 0;\n int maxRadius = towers[0].second;\n for (int i = 1; i < n; i++) {\n int voltage = max(0, towers[i].first - towers[i-1].first - maxRadius);\n minVoltage = max(minVoltage, voltage);\n maxRadius = max(maxRadius, towers[i].second);\n }\n \n cout << minVoltage << endl;\n \n return 0;\n}\n
原文地址: https://www.cveoy.top/t/topic/pNjD 著作权归作者所有。请勿转载和采集!