2 条题解
-
0
#include <iostream> using namespace std; int main() { // n: 接水人数, m: 水龙头个数 int n, m; cin >> n >> m; // 创建数组存储每个人的接水量 int w[10005]; // 因为n最大10000,多开一点空间 // 读入每个人的接水量 for (int i = 1; i <= n; i++) { cin >> w[i]; } // 创建数组存储每个水龙头的剩余接水时间 // 一开始,前m个人分别占用m个水龙头 int taps[105] = {0}; // 水龙头剩余时间,m最大100 // 初始化:前m个人开始接水 for (int i = 1; i <= m; i++) { taps[i] = w[i]; } // 记录当前要安排的第几个人(从第m+1个人开始) int nextPerson = m + 1; // 记录总时间 int time = 0; // 当还有人没接完水时,继续循环 while (nextPerson <= n) { // 找出当前剩余时间最少的水龙头 int minTime = 1000000; // 先设一个很大的数 int minIndex = 1; for (int i = 1; i <= m; i++) { if (taps[i] < minTime) { minTime = taps[i]; minIndex = i; } } // 时间流逝minTime秒 time = time + minTime; // 所有水龙头的剩余时间减去minTime for (int i = 1; i <= m; i++) { taps[i] = taps[i] - minTime; } // 把下一个接水的人安排到空出来的水龙头 taps[minIndex] = w[nextPerson]; nextPerson++; } // 最后,找出所有水龙头中剩余时间最长的 int maxTime = 0; for (int i = 1; i <= m; i++) { if (taps[i] > maxTime) { maxTime = taps[i]; } } // 总时间 = 已经过的时间 + 最后一批人接完需要的时间 time = time + maxTime; // 输出结果 cout << time << endl; return 0; }
信息
- ID
- 581
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 8
- 标签
- 递交数
- 13
- 已通过
- 6
- 上传者