2023-11-07 ABC214 A, B, C
風が強い。なんだか調子が悪い。早めに寝よう。
ABC214 : AtCoder Beginner Contest 214
- A - New Generation ABC https://atcoder.jp/contests/abc214/tasks/abc214_a
- B - How many?
https://atcoder.jp/contests/abc214/tasks/abc214_b
- 提出: https://atcoder.jp/contests/abc214/submissions/47360332
- 素朴に全探索 (3重ループ)
- C - Distribution
https://atcoder.jp/contests/abc214/tasks/abc214_c
- 提出: https://atcoder.jp/contests/abc214/submissions/47360505
- 時間効率を無視すれば T_i から 1 周して最小値を更新する方法が思い浮かぶ
- それでは O(N^2) で間に合わない
- 例えば S がすべて同一だとして T が降順に並んでいるとき O(N^2) になる
- T_i は小さいものから試して、最小値を更新できないなら打ち切れば良さそうだ
- T_i の昇順に試しても S_i の差異によって大量の更新が発生し得る
- T_i を更新後に次に進むのではなくダイクストラ法の要領で BinaryHeap に T_i + S_i に更新するようエンキューして最小のものを順に取り出すと良い
- D - Sum of Maximum Weights
https://atcoder.jp/contests/abc214/tasks/abc214_d
- 未着手
- E - Packing Under Range Regulations
https://atcoder.jp/contests/abc214/tasks/abc214_e
- 未着手
- F - Substrings
https://atcoder.jp/contests/abc214/tasks/abc214_f
- 未着手
- G - Three Permutations
https://atcoder.jp/contests/abc214/tasks/abc214_g
- 未着手
- H - Collecting
https://atcoder.jp/contests/abc214/tasks/abc214_h
- 未着手
use std::{cmp::Reverse, collections::BinaryHeap};
use proconio::input;
fn main() {
input! {
n: usize,
s: [usize; n],
t: [usize; n],
};
let inf = 1_000_000_000_usize;
let mut min = vec![inf; n];
let mut pq = BinaryHeap::new();
for (i, t_i) in t.iter().copied().enumerate() {
pq.push((Reverse(t_i), i));
}
while let Some((Reverse(t_i), i)) = pq.pop() {
if min[i] <= t_i {
continue;
}
min[i] = t_i;
let j = (i + 1) % n;
pq.push((Reverse(t_i + s[i]), j));
}
for a in min {
println!("{}", a);
}
}
今日のコミット。
- rust-atcoder 1 commit
- kireta 1 commit