在一条笔直的马路上有 nn 个塔台,它们被依次标号为 1, 2, \cdots, n1,2,⋯,n,分别处于距离马路起点 a _ 1, a _ 2, \cdots, a _ na 1 ,a 2 ,⋯,a n (a _ 1 < a _ 2 < \cdots < a _ na 1 <a 2 <⋯<a n )的位置。 每个塔台初始时有一个通讯半径 b _ 1, b _ 2, \cdots, b _ nb 1 ,b 2 ,⋯,b n ,这代表,对于 ii 号塔台,其可以与 [a _ i - b _ i, a _ i + b _ i][a i−bi,ai+bi] 范围内的塔台通讯。 需要特别注意,对于两个塔台 A、B,当且仅当 A 塔台的位置处在 B 塔台的通讯范围内,B 塔台才能向 A 塔台传递信号。请注意这里不是「二者的通讯范围重合,即可通讯」。 现在你可以对这些塔台进行超频。具体的,你可以指定一个电压 kk,之后所有塔台都会被加上 kk 的电压,通讯半径都会增大 kk。这里的 kk 仅可为非负整数。 现在要求你通过超频,使信号可以从 11 号塔台依次通过 2, 3, \cdots2,3,⋯ 号塔台传输到 nn 号塔台,但是由于不合理的超频会较严重地磨损塔台,因此你想要尽可能降低超频的电压。 请你计算出,为了达到以上目的,塔台超频需要的最小电压是多少。用c++
时间: 2024-04-16 20:26:43 浏览: 12
以下是计算塔台超频所需的最小电压的C++代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> positions(n), radii(n);
for (int i = 0; i < n; i++) {
cin >> positions[i];
}
for (int i = 0; i < n; i++) {
cin >> radii[i];
}
int minVoltage = 0;
for (int i = 1; i < n; i++) {
if (positions[i] - positions[i-1] > radii[i-1]) {
int voltage = (positions[i] - positions[i-1] - radii[i-1] + 1) / 2;
minVoltage = max(minVoltage, voltage);
}
}
cout << minVoltage << endl;
return 0;
}
```
该代码首先读取塔台的数量n,然后分别读取塔台的位置和通讯半径。接下来,使用一个循环遍历塔台,查找需要超频的情况,并计算出最小的电压。最后,输出最小电压。
请注意,该代码假设输入满足题目描述中的条件,即塔台位置按升序排列。在实际使用中,应根据实际情况进行输入验证和错误处理。