2023-02-06 ABC064 の A, B, C, D を解いた
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