ABC064: AtCoder Beginner Contest 064 の A, B, C, D を解いた。
- A - RGB Cards
https://atcoder.jp/contests/abc064/tasks/abc064_a
- 提出: https://atcoder.jp/contests/abc064/submissions/38673227
(r * 100 + g * 10 + b) % 4 == 0
- B - Traveling AtCoDeer Problem
https://atcoder.jp/contests/abc064/tasks/abc064_b
- 提出: https://atcoder.jp/contests/abc064/submissions/38673266
a.sort(); let ans = a.iter().max().unwrap() - a.iter().min().unwrap();
- C - Colorful Leaderboard
https://atcoder.jp/contests/abc064/tasks/abc064_c
- 提出: https://atcoder.jp/contests/abc064/submissions/38673668
- 色数の上限を 8 種類と勘違いして 2WA, 長さを間違えて 1RE
- 最小値側の 3200 未満までの個数が 0 かつ 3200 以上の個数が 1 以上のときというコーナーケースがある
- D - Insertion
https://atcoder.jp/contests/abc064/tasks/abc064_d
- 提出: https://atcoder.jp/contests/abc064/submissions/38674246
- 最初スタックに積んで……と考えたのだけど、多すぎる
)
に対して(
を挿入する位置がよく分からなかった - 多すぎる
(
に対しては辞書順最小なので末尾に)
をスタックに残った長さ分だけ追加すればいい - これを逆に考えれば良さそうと気づく
- 反転して同様に処理すれば良い
- 解いてから気づいたことには結局先頭と末尾に足せば良いだけで、共通化もしなかったこともあって、かなり冗長 (醜い) なコードを書いてしまった
use proconio::{input, marker::Chars}; fn main() { input! { _n: usize, mut s: Chars, }; let mut stack = vec![]; let mut t = vec![]; for (i, s_i) in s.iter().copied().enumerate() { match s_i { '(' => { stack.push(i); } ')' => { stack.pop(); } _ => unreachable!(), } t.push(s_i); } while let Some(_) = stack.pop() { t.push(')'); } t.reverse(); s = t .into_iter() .map(|t_i| match t_i { '(' => ')', ')' => '(', _ => unreachable!(), }) .collect::<Vec<char>>(); let mut t = vec![]; for (i, s_i) in s.iter().copied().enumerate() { match s_i { '(' => { stack.push(i); } ')' => { stack.pop(); } _ => unreachable!(), } t.push(s_i); } while let Some(_) = stack.pop() { t.push(')'); } t.reverse(); let ans = t .into_iter() .map(|t_i| match t_i { '(' => ')', ')' => '(', _ => unreachable!(), }) .collect::<String>(); println!("{}", ans); }
調子が悪い。停滞している。
今日のコミット。
- rust-sandbox 1 commit
- rust-atcoder 1 commit