ABC 320
Table of Contents
https://atcoder.jp/contests/abc320
A. Leyland Number
https://atcoder.jp/contests/abc320/tasks/abc320_a
B. Longest Palindrome
https://atcoder.jp/contests/abc320/tasks/abc320_b
C. Slot Strategy 2 (Easy)
https://atcoder.jp/contests/abc320/tasks/abc320_c
D. Relative Position
https://atcoder.jp/contests/abc320/tasks/abc320_d
E. Somen Nagashi
https://atcoder.jp/contests/abc320/tasks/abc320_e
並んでいる人は id が小さい順で常に並んでいる、列から離れた人は帰ってくる時間が小さい順に並んでいると考えればそれぞれを priority queue で管理すれば問題が解けることがわかる
void solve() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n >> m;
vll ans(n);
priority_queue<int, vint, greater<int>> people;
// time, id
using P = pair<ll, int>;
priority_queue<P, vector<P>, greater<P>> tpq;
rep(i, n) people.push(i);
rep(i, m) {
ll t, w, s;
cin >> t >> w >> s;
// そうめんが流れてくるまでに列に戻ってくる人を列に戻す
while (tpq.size() && tpq.top().first <= t) {
auto [t, id] = tpq.top();
tpq.pop();
people.push(id);
}
// 列に誰もいなかったら何もしない
if (people.size() == 0)
continue;
auto p = people.top();
people.pop();
ans[p] += w;
tpq.push({t + s, p});
}
for (ll x : ans)
cout << x << '\n';
}
F. Fuel Round Trip
https://atcoder.jp/contests/abc320/tasks/abc320_f