AtCoder Beginner Contest 167 に参加しました
成績
1級!
A - Registration
ちょっと難しめ? T.substr(0, |S|) == S かどうか。
B - Easy Linear Programming
書かれてる数が大きい方から 枚使う。
C - Skill Up
がめっちゃ小さいので、 冊の本を買う / 買わないの 通りを全部試せる。
D - Teleporter
競技コピーアンドペースト…
E - Colorful Blocks
これ好き。「隣り合うブロックの組であって同じ色で塗られている組」が 組になるような塗り方はこんな感じで作れる:
- 初めから色が塗られたブロックを用意する
- 個のブロックを同じ色が隣合わないように並べる
- (ブロックの総数が 個になるように)いくつかのブロックを合計 回砕く
なので、各 に対して
- ブロックの並べ方 通り
- 砕くブロックの選び方 通り
をかけたものを足し上げればOK。
F - Bracket Sequencing
文字列 が括弧列であるための条件は
- 「' ( ' の数 = ' ) ' の数」になること
- 前から見ていったときに 、「' ( ' の数 < ' ) ' の数」となる瞬間がないこと
よって、各 について興味があるのは
- ' ( ' の数 - ' ) 'の数(とする)
- 前から見ていったときの「' ( ' の数 - ' ) 'の数」の最小値(とする)
だけ。のときは明らかに"No"なのでそれ以外の場合を考えればいい。
直前までの「' ( ' の数 - ' ) 'の数」が のとき、次にの順で連結する場合との順で連結する場合とを比べてみる。前者がアウトにならない条件は、 かつ 、つまり 。同様に、後者がアウトにならない条件は 。よって、 なら を前に、そうでなければ を前に持ってきた方がお得。
あとはこのルールでソートして、前から順番に確認していけばOK。
途中ガチャに走ってもうて、不要不急の5ペナ…。
反省
貪欲は証明