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;
}
posted @ 2024-02-27 20:39  Foiled  阅读(7)  评论(0编辑  收藏  举报