USACO3.2:纺车的轮子实现思路、代码及复杂度剖析
```cpp #include <iostream> #include <vector> using namespace std; // 定义轮子结构体,包含旋转速度和缺口信息 struct Wheel { int speed; vector<pair<int, int>> gaps; }; // 检查在给定时间 t 时,是否所有轮子的缺口都能对齐 bool check(const vector<Wheel>& wheels, int t) { // 遍历所有可能的角度 for (int angle = 0; angle < 360; ++angle) { bool allAligned = true; // 检查每个轮子在时间 t 时该角度是否有缺口 for (const auto& wheel : wheels) { bool hasGap = false; for (const auto& gap : wheel.gaps) { int start = (gap.first + wheel.speed * t) % 360; int end = (start + gap.second - 1) % 360; if (start <= end) { if (angle >= start && angle <= end) { hasGap = true; break; } } else { if (angle >= start || angle <= end) { hasGap = true; break; } } } if (!hasGap) { allAligned = false; break; } } if (allAligned) { return true; } } return false; } int main() { vector<Wheel> wheels(5); // 读取每个轮子的信息 for (int i = 0; i < 5; ++i) { int speed, numGaps; cin >> speed >> numGaps; wheels[i].speed = speed; for (int j = 0; j < numGaps; ++j) { int start, width; cin >> start >> width; wheels[i].gaps.emplace_back(start, width); } } // 遍历时间,从 0 到 360 秒 for (int t = 0; t <= 360; ++t) { if (check(wheels, t)) { cout << t << endl; return 0; } } cout << "none" << endl; return 0; } ``` 代码解释: 1. 结构体 `Wheel`:用于存储每个轮子的旋转速度和缺口信息。`speed` 表示轮子的旋转速度,`gaps` 是一个存储缺口起始角度和宽度的向量。 2. 函数 `check`:用于检查在给定时间 `t` 时,是否所有轮子的缺口都能对齐。通过遍历所有可能的角度,对于每个角度,检查每个轮子在该时间是否有缺口覆盖该角度。 3. 主函数 `main`: - 读取每个轮子的信息,包括旋转速度、缺口数量和每个缺口的起始角度和宽度。 - 遍历时间,从 0 到 360 秒,调用 `check` 函数检查是否有缺口对齐的情况。 - 如果找到对齐的时间,输出该时间并结束程序;否则,输出 `none`。 复杂度分析: - 时间复杂度:$O(360 \times 360 \times 5 \times 5)$,其中 360 是时间的最大值,360 是角度的最大值,5 是轮子的数量,5 是每个轮子最多的缺口数量。 - 空间复杂度:$O(5 \times 5)$,主要用于存储每个轮子的缺口信息。 ######[AI问答 | 857点数解答 | 2026-02-03 15:22:29]
- USACO3.2:纺车的轮子实现思路、代码及复杂度剖析(字节豆包 | 857点数解答 | 2026-02-03 15:22:29)31
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)343
- Java 实现通用文件存储系统:含随机读写与空闲空间回收(字节豆包 | 686点数解答 | 2024-11-21 16:25:51)223
- C++求解序列或与运算和差值:避O(nq)复杂度及数据处理要点(字节豆包 | 534点数解答 | 2025-10-17 20:05:07)60
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)310
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)457
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)354
- iOS开发:手把手教你完整实现代理模式,含声明与实现步骤!(阿里通义 | 268点数解答 | 2023-11-08 00:39:55)250
- JavaScript 开发:用 Animation 实现自定义动画的简易教程 (阿里通义 | 333点数解答 | 2023-11-09 01:50:07)240
- Vue.js 与 Matter.js 碰撞:轻松实现物理模拟全攻略 (讯飞星火 | 522点数解答 | 2024-05-29 22:26:06)426
- JS实现移动端网页快捷键创建方式及注意事项(阿里通义 | 284点数解答 | 2024-06-05 19:02:59)262
- 车载系统 UML 类图设计:涵盖 Car、Engine、娱乐系统等的完整类定义与关系解析 (字节豆包 | 760点数解答 | 2024-08-15 22:51:04)307