蛐蛐国蚯蚓问题的C++解决方案
以下是解决该问题的C++代码: ```cpp #include <iostream> #include <vector> #include <algorithm> #include <queue> using namespace std; // 比较函数,用于优先队列 struct cmp { bool operator()(int a, int b) { return a < b; } }; int main() { int n, m, q, u, v, t; cin >> n >> m >> q >> u >> v >> t; // 存储初始蚯蚓长度的优先队列 priority_queue<int, vector<int>, cmp> pq; for (int i = 0; i < n; i++) { int len; cin >> len; pq.push(len); } // 存储新生成蚯蚓的两个队列 queue<int> q1, q2; int add = 0; // 记录累计增加的长度 vector<int> cut_lengths; // 存储每秒切断的蚯蚓长度 for (int i = 0; i < m; i++) { int max_len; // 从三个队列中找出最长的蚯蚓 if (q1.empty() && q2.empty()) { max_len = pq.top(); pq.pop(); } else if (pq.empty() && q2.empty()) { max_len = q1.front(); q1.pop(); } else if (pq.empty() && q1.empty()) { max_len = q2.front(); q2.pop(); } else if (pq.empty()) { if (q1.front() > q2.front()) { max_len = q1.front(); q1.pop(); } else { max_len = q2.front(); q2.pop(); } } else if (q1.empty()) { if (pq.top() > q2.front()) { max_len = pq.top(); pq.pop(); } else { max_len = q2.front(); q2.pop(); } } else if (q2.empty()) { if (pq.top() > q1.front()) { max_len = pq.top(); pq.pop(); } else { max_len = q1.front(); q1.pop(); } } else { int a = pq.top(); int b = q1.front(); int c = q2.front(); if (a >= b && a >= c) { max_len = a; pq.pop(); } else if (b >= a && b >= c) { max_len = b; q1.pop(); } else { max_len = c; q2.pop(); } } // 加上累计增加的长度 max_len += add; cut_lengths.push_back(max_len); // 计算切断后的两段长度 int left = 1LL * max_len * u / v; int right = max_len - left; // 新生成的蚯蚓长度减去当前累计增加的长度,因为后续会统一增加 q1.push(left - add - q); q2.push(right - add - q); // 所有蚯蚓长度增加q add += q; } // 输出每秒切断的蚯蚓长度 for (int i = t - 1; i < m; i += t) { if (i != t - 1) cout << " "; cout << cut_lengths[i]; } cout << endl; // 将所有蚯蚓长度存储到一个向量中 vector<int> all_lengths; while (!pq.empty()) { all_lengths.push_back(pq.top() + add); pq.pop(); } while (!q1.empty()) { all_lengths.push_back(q1.front() + add); q1.pop(); } while (!q2.empty()) { all_lengths.push_back(q2.front() + add); q2.pop(); } // 对所有蚯蚓长度进行排序 sort(all_lengths.begin(), all_lengths.end(), greater<int>()); // 输出m秒后蚯蚓的长度 for (int i = t - 1; i < n + m; i += t) { if (i != t - 1) cout << " "; cout << all_lengths[i]; } cout << endl; return 0; } ``` ### 代码解释: 1. **输入处理**:读取输入的`n`, `m`, `q`, `u`, `v`, `t`以及初始蚯蚓的长度,并将初始蚯蚓长度存储在优先队列`pq`中。 2. **模拟过程**:在`m`秒内,每秒找出最长的蚯蚓进行切断,将切断后的两段分别存储在`q1`和`q2`队列中,同时更新所有蚯蚓的长度。 3. **输出结果**: - 第一行输出第`t`秒,第`2t`秒,第`3t`秒,……被切断蚯蚓(在被切断前)的长度。 - 第二行输出`m`秒后蚯蚓的长度,按从大到小的顺序输出排名第`t`,第`2t`秒,第`3t`秒,……的长度。 ######[AI问答 | 1271点数解答 | 2026-03-29 19:26:12]
- 导出功能优化:解决多次导出、过程异常、失败提示及完成通知问题 (DeepSeek | 1点数解答 | 2025-02-12 17:35:54)189
- 浙闽“板凳龙”舞龙队 300 秒螺线盘入:位置与速度全揭秘(阿里通义 | 886点数解答 | 2024-09-07 10:31:31)633
- 浙闽“板凳龙”舞龙队 300 秒位置与速度数学模型揭秘(GPT | 565点数解答 | 2024-09-07 10:32:56)530
- 223节板凳龙沿等距螺线盘入:300秒内位置与速度的数学揭秘 (讯飞星火 | 443点数解答 | 2024-09-07 10:34:10)380
- 浙闽“板凳龙”300秒舞龙轨迹与速度:数学模型揭秘!(字节豆包 | 522点数解答 | 2024-09-07 10:35:06)350
- Excel 销售数据难题:2024 年 Q3 及特定时段销售情况计算全攻略(字节豆包 | 762点数解答 | 2024-11-06 19:11:51)194
- 从封闭到觉醒:中国在西方文化冲击下的曲折蜕变(讯飞星火 | 331点数解答 | 2024-11-30 21:50:57)195
- 陈独秀〈吾人最后之觉悟〉:文化冲突下的觉醒与奋进之路(百度文心 | 458点数解答 | 2024-11-30 21:51:52)203
- 从文化冲突到国民觉悟:中国近代变革的觉醒之路( | 21点数解答 | 2024-11-30 21:52:33)195
- Python:生成含随机缺失值二维数组并处理,附随机选元素赋缺失值代码解析(阿里通义 | 300点数解答 | 2025-03-13 20:19:30)218
- 破解“没有3的世界”:找出第n个合规正整数!(DeepSeek | 471点数解答 | 2025-03-17 14:32:58)252
- C++ 破解“没有 3 的世界”:找出第 n 个特殊正整数!(字节豆包 | 333点数解答 | 2025-03-17 22:48:43)152