ABC128 : AtCoder Beginner Contest 128 の A, B, C, D を解いた。
- A - Apple Pie
https://atcoder.jp/contests/abc128/tasks/abc128_a
- 提出: https://atcoder.jp/contests/abc128/submissions/39929246
(3 * a + p) / 2
- B - Guidebook
https://atcoder.jp/contests/abc128/tasks/abc128_b
- 提出: https://atcoder.jp/contests/abc128/submissions/39929374
- 添字を持っておき、市名の昇順・点数の降順でソートして、添字を出力
- C - Switches
https://atcoder.jp/contests/abc128/tasks/abc128_c
- 提出: https://atcoder.jp/contests/abc128/submissions/39929730
N, M <= 10
なのですべてのスイッチの on/off の組み合わせに対して電球の条件を確かめても間に合う
- D - equeue
https://atcoder.jp/contests/abc128/tasks/abc128_d
- 提出: https://atcoder.jp/contests/abc128/submissions/39930874
N <= 50
K <= 100
なので、左から取る個数・右から取る個数を決めて、不要なものを戻せるだけ戻しても間に合う
use std::{cmp::Reverse, collections::BinaryHeap}; use proconio::input; fn main() { input! { n: usize, k: usize, v: [i64; n], }; let mut max = 0_i64; for left in 0..=k.min(n) { for right in 0..=k.min(n) - left { let mut sum = 0_i64; let mut bag = BinaryHeap::new(); for i in 0..left { sum += v[i]; bag.push(Reverse(v[i])); } for i in 0..right { sum += v[n - 1 - i]; bag.push(Reverse(v[n - 1 - i])); } for _ in 0..k.saturating_sub(left + right) { if let Some(Reverse(x)) = bag.pop() { if x < 0_i64 { sum -= x; } } } max = max.max(sum); } } let ans = max; println!("{}", ans); }
bouzuya/tsukota に編集機能を追加している。
今日のコミット。