2023-03-21 ABC128 の A, B, C, D を解いた
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 に編集機能を追加している。
今日のコミット。