2023-09-14 ABC197 A, B, C, D, E を解いた
口が痛い。体調も悪い。
ABC197 : AtCoder Beginner Contest 197(Sponsored by Panasonic)
- A - Rotate
https://atcoder.jp/contests/abc197/tasks/abc197_a
- 提出: https://atcoder.jp/contests/abc197/submissions/45525317
rotate_left(1)
- B - Visibility
https://atcoder.jp/contests/abc197/tasks/abc197_b
- 提出: https://atcoder.jp/contests/abc197/submissions/45525549
- 点から上下左右に
#
か終わりまで数える - 始点を 2 回数えるので -1 する
- C - ORXOR
https://atcoder.jp/contests/abc197/tasks/abc197_c
- 提出: https://atcoder.jp/contests/abc197/submissions/45526142
- 区切り位置を bit 全探索し、指示通りの計算をする
- 最大で
1 << 19
なので間に合う
- D - Opposite
https://atcoder.jp/contests/abc197/tasks/abc197_d
- 提出: https://atcoder.jp/contests/abc197/submissions/45526837
- 嫌い
- 中心点を求めて、そこから 360 / n 度回転した位置を cos と sin で気合で求めた
- E - Traveler
https://atcoder.jp/contests/abc197/tasks/abc197_e
- 提出: https://atcoder.jp/contests/abc197/submissions/45527320
- 色ごと座標ごとの昇順にソートする
- 各色ごとには左から右 or 右から左に移動するのが最善
- 色の区切りごとに現在の色の終点から次の色の左か右のどちらかの始点に移動する
- 色ごとの「左から右」の距離の和と色区切りの終点と始点の DP の和の最小値が答えになる
- F - Construct a Palindrome
https://atcoder.jp/contests/abc197/tasks/abc197_f
- 未着手
use std::collections::BTreeMap;
use proconio::input;
fn main() {
input! {
n: usize,
mut xc: [(i64, i64); n],
};
xc.sort_by_key(|&(x, c)| (c, x));
let mut map = BTreeMap::new();
for (x, c) in xc {
let (min, max) = map.entry(c).or_insert((x, x));
*min = (*min).min(x);
*max = (*max).max(x);
}
let mut ans = 0_i64;
let mut prev = ((0_i64, 0_i64), (0_i64, 0_i64));
for (_, (min, max)) in map {
ans += (max - min).abs();
let (pos, dist) = prev;
prev = (
(min, max),
(
// prev -> max -> min
(dist.0 + (pos.0 - max).abs()).min(dist.1 + (pos.1 - max).abs()),
// prev -> min -> max
(dist.0 + (pos.0 - min).abs()).min(dist.1 + (pos.1 - min).abs()),
),
);
}
let (pos, dist) = prev;
let ans = ans + (pos.0.abs() + dist.0).min(pos.1.abs() + dist.1);
println!("{}", ans);
}
今日のコミット。
- rust-atcoder 1 commit
- kireta 2 commits