ABC100 : AtCoder Beginner Contest 100 の A, B, C, D を解いた。
- A - Happy Birthday!
https://atcoder.jp/contests/abc100/tasks/abc100_a
- 提出: https://atcoder.jp/contests/abc100/submissions/39752538
- パッと解けない難しい A
- 赤・青のペアで確保すべき個数をまず取り除いて、残ったものが余白の半分以下で判定した
- 解説によると
X <= 8 && Y <= 8
で良かったようだ
- B - Ringo's Favorite Numbers
https://atcoder.jp/contests/abc100/tasks/abc100_b
- 提出: https://atcoder.jp/contests/abc100/submissions/39752875
- 100 でちょうど D 回のちょうどの部分を間違って 3WA
- 個数がしれているので単純に前から試した
- C - *3 or /2
https://atcoder.jp/contests/abc100/tasks/abc100_c
- 提出: https://atcoder.jp/contests/abc100/submissions/39752921
- 要するに数列 a に 2 で割り切れる要素が含まれていれば操作できる
- 各要素を 2 で割れるだけ割って、その回数の総和が答えになる
- A, B のほうが難しく感じる
- D - Patisserie ABC
https://atcoder.jp/contests/abc100/tasks/abc100_d
- 提出: https://atcoder.jp/contests/abc100/submissions/39753185
- 「合計の絶対値」は、プラスばかりを選ぶかマイナスばかりを選ぶかになる
- 3 種類のものについてそれぞれプラスかマイナスかを選択するので 23 で 8 通り
- それぞれについてソートして先頭から M 件を取れば良い
use proconio::input; fn main() { input! { n: usize, m: usize, xyz: [(i64, i64, i64); n], }; let mut max = -(1_i64 << 60); for bits in 0..1 << 3 { let sign = (0..3) .map(|i| if ((bits >> i) & 1) == 1 { 1 } else { -1 }) .collect::<Vec<i64>>(); let mut b = xyz .iter() .copied() .map(|(x, y, z)| x * sign[0] + y * sign[1] + z * sign[2]) .collect::<Vec<i64>>(); b.sort(); let sum = b.iter().rev().take(m).sum::<i64>(); max = max.max(sum); } let ans = max; println!("{}", ans); }
今日のコミット。
- tsukota 2 commits
- rust-atcoder 1 commit