2023-03-15 ABC100 の A, B, C, D を解いた
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 種類のものについてそれぞれプラスかマイナスかを選択するので 2^3 で 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