風が強い。なんだか調子が悪い。早めに寝よう。
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(N2) で間に合わない
- 例えば S がすべて同一だとして T が降順に並んでいるとき O(N2) になる
- 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