CF85B Embassy Queue
好久没水题解了,来水一道。
题目传送门:Luogu && Codeforces
题意
有 \(n\) 个人在 \(c_i\) 个时刻来办事,共 \(3\) 个窗口,每个人到每个窗口办事分别需要不同的事件,每个窗口只能同时处理一个人,问在最优安排下,办事时间最长的人最少需要多少时间。(实际上翻译说得已经很清楚了)
思路
一眼贪心。
对于每个新来的人而言,如果有空的窗口就直接选择这个窗口;如果没有,就等有空窗口时再进入。
用当前最有时间减去开始时间,即为停留时间。
代码
注意要开 long long
。
#include <bits/stdc++.h>
#define int long long
#define maxn 100005
using namespace std;
namespace cyxyc {
int n, ans, c, rem;
int k[10], t[10], a[10][maxn];
void solve() {
ios::sync_with_stdio();
cin.tie(0);
for (int i = 1; i <= 3; i++) cin >> k[i];
for (int i = 1; i <= 3; i++) cin >> t[i];
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> c;
rem = c;
for (int j = 1; j <= 3; j++) {
a[j][i % k[j]] = t[j] + max(a[j][i % k[j]], rem);
rem = a[j][i % k[j]];
}
ans = max(ans, rem - c);
}
cout << ans << '\n';
}
}
signed main() {
cyxyc::solve();
return 0;
}
Blog by cloud_eve is licensed under CC BY-NC-SA 4.0