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; } -
0
C++ :
#include<iostream> using namespace std; int T[200]; int main() { int n,m,t; cin >> n >> m; for(int i=0; i<n; ++i) { cin >> t; int min_index = 0; for(int j=1; j<m; ++j) { if(T[j] < T[min_index]) min_index = j; } T[min_index] += t; } int max_index = 0; for(int i=1; i<m; ++i) { if(T[i] > T[max_index]) max_index = i; } cout << T[max_index] << endl; return 0; }Pascal :
var a:array[1..11000] of integer; b:array[1..100] of integer; i,j,n,m,next,sum:longint; function check:boolean; var i:integer; begin for i:=1 to m do if a[b[i]]>0 then exit(true); check:=false; end; begin readln(n,m); for i:=1 to n do read(a[i]); for i:=1 to m do b[i]:=i; next:=m+1; repeat for i:=1 to m do begin dec(a[b[i]]); if a[b[i]]=0 then begin b[i]:=next; inc(next); end; end; inc(sum); until not check; writeln(sum); end.
- 1
信息
- ID
- 581
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 8
- 标签
- 递交数
- 13
- 已通过
- 6
- 上传者