2022-05-10 ABC250 の A, B, C, D, E を解いた
ABC250 : AtCoder Beginner Contest 250 の A, B, C, D, E を解いた。
A, B, C, D は本番で解けたもの。 E は昨日 (2022-05-09) 解いたもの。練習のため解き直している。
- A - Adjacent Squares
https://atcoder.jp/contests/abc250/tasks/abc250_a
- 提出: https://atcoder.jp/contests/abc250/submissions/31586231
- 指定されたマスから上下左右のマスが存在するかを確認して数えれば良い
- いつもスニペットで使っている 4 方向を探索するコードを流用した
- スニペットにするくらいよく使う
- B - Enlarged Checker Board
https://atcoder.jp/contests/abc250/tasks/abc250_b
- 提出: https://atcoder.jp/contests/abc250/submissions/31586282
- タイルの走査 (
0..N
) を縦横にマスの走査 (0..A
と0..B
) で 4 重ループ '.'
で初期化して'#'
で塗れば良い- 黒はタイルの
(i + j) % 2 != 0
で判定できる - このようなマスの偶奇の判定・分類はわりとよく使うテクニック
- C - Adjacent Swaps
https://atcoder.jp/contests/abc250/tasks/abc250_c
- 提出: https://atcoder.jp/contests/abc250/submissions/31586382
- 位置→整数の対応と整数→位置の対応の両方を持って更新すれば間に合う
- ……のだけど混乱する
- 本番では 0-based indexing したので余計に混乱した
- 今日は 1-based indexing したのとハマりどころを把握していたので混乱しなかった
- D - 250-like Number
https://atcoder.jp/contests/abc250/tasks/abc250_d
- 提出: https://atcoder.jp/contests/abc250/submissions/31586483
- 本番では変なハマりかたをして解くのが遅れた
- 実は茶 diff でしかない
N <= 10^18
とp * q^3
を見た時点でq
を走査すればいいのだと分かるq <= 10^6
の素数なので列挙できる- 本番では二分探索のところで upper_bound して実際にアクセスしてみて確かめるなどおかしなことをしていた
- 解説を見てエラトステネスのふるいを素数を 1 それ以外を 0 で持ち
- ふるいの結果の累積和に対して
N / (q * q * q)
とq - 1
で lower_bound したところの値が答えになる
- E - Prefix Equality
https://atcoder.jp/contests/abc250/tasks/abc250_e
- 提出: https://atcoder.jp/contests/abc250/submissions/31586580
- 昨日 (2022-05-09) も解いたので割愛
bouzuya/rust-sandbox の iko で mod ごとに Error と Result<T, E = Error>
を定義する件を試している。
いままでは XError
のように suffix に Error をつけることが多かった。必要なら mod_name::Error
と使えばいいと割り切ってしまうほうが良いのかもしれないと思って試している。
https://twitter.com/bouzuya/status/1522063536985321473
今日のコミット。