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ペナ…。
反省
貪欲は証明