巧用二分查找:求解塔台超频最小电压实现信号依次传输
```cpp #include <iostream> #include <vector> using namespace std; // 检查在给定电压 k 下,信号是否能从 1 号塔台依次传输到 n 号塔台 bool canReach(const vector<int>& a, const vector<int>& b, int k) { int currentPos = a[0]; int currentRange = a[0] + b[0] + k; for (int i = 1; i < a.size(); ++i) { if (a[i] <= currentRange) { currentPos = a[i]; currentRange = a[i] + b[i] + k; } else { return false; } } return true; } // 二分查找最小电压 int findMinVoltage(const vector<int>& a, const vector<int>& b) { int left = 0, right = 1e9; int result = right; while (left <= right) { int mid = left + (right - left) / 2; if (canReach(a, b, mid)) { result = mid; right = mid - 1; } else { left = mid + 1; } } return result; } int main() { int n; cin >> n; vector<int> a(n); vector<int> b(n); for (int i = 0; i < n; ++i) { cin >> a[i] >> b[i]; } int minVoltage = findMinVoltage(a, b); cout << minVoltage << endl; return 0; } ``` 代码解释: 1. `canReach` 函数:该函数用于检查在给定电压 `k` 下,信号是否能从 1 号塔台依次传输到 `n` 号塔台。它遍历每个塔台,如果当前塔台的位置在当前可到达的范围内,则更新当前位置和可到达范围;否则,返回 `false`。 2. `findMinVoltage` 函数:使用二分查找来找到最小的满足条件的电压。左端点 `left` 初始化为 0,右端点 `right` 初始化为 `1e9`。在二分查找过程中,取中间值 `mid`,调用 `canReach` 函数检查是否能到达。如果可以到达,则更新结果并缩小右边界;否则,扩大左边界。 3. `main` 函数:读取输入的塔台数量 `n` 和每个塔台的位置和初始通讯半径,调用 `findMinVoltage` 函数计算最小电压,并输出结果。 复杂度分析: - 时间复杂度:$O(n \log m)$,其中 $n$ 是塔台的数量,$m$ 是最大可能的电压值。二分查找的时间复杂度是 $O(\log m)$,每次检查的时间复杂度是 $O(n)$。 - 空间复杂度:$O(n)$,主要用于存储每个塔台的位置和初始通讯半径。 ######[AI问答 | 720点数解答 | 2025-11-26 20:30:18]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)343
- 巧用二分查找:求解塔台超频最小电压实现信号依次传输(字节豆包 | 720点数解答 | 2025-11-26 20:30:18)44
- 旅行售货员问题:详细步骤剖析与贪心算法Python代码实现(字节豆包 | 444点数解答 | 2024-12-17 03:32:59)275
- Dev C++ 实现旅行售货员问题:最小路程路线代码与详细解析 (字节豆包 | 448点数解答 | 2024-12-17 03:33:42)176
- C++ 求解 P1020 小核桃与删除字符串问题:双指针与枚举策略 (字节豆包 | 330点数解答 | 2026-02-07 18:40:10)23
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)310
- 不依赖工具箱!MATLAB实现彩色数字图像全流程传输系统代码揭秘(百度文心 | 1157点数解答 | 2024-11-30 19:29:40)572
- 不用工具箱!MATLAB实现含全流程的彩色数字图像传输系统代码(阿里通义 | 795点数解答 | 2024-11-30 19:32:15)141
- Matlab实现不依赖工具箱的彩色数字图像传输系统:含全流程代码 (GPT | 965点数解答 | 2024-11-30 19:36:16)292
- MATLAB实现:无工具箱彩色数字图像传输系统代码全解析(含编解码与调制解调)(讯飞星火 | 1185点数解答 | 2024-11-30 19:38:20)118
- Linux开发:用find命令查找/usr目录下超1MB的文件(百度文心 | 153点数解答 | 2023-11-09 18:45:10)206
- 8 个实用命令,助 Linux 开发者轻松查找服务器平均负载!(百度文心 | 311点数解答 | 2023-11-09 18:47:10)223