AtCoder Beginner Contest 303 D問題 Shift vs. CapsLock
問題
提出解答
問題の概要
a key, Shift key, CapsLock key からなるキーボード, ランプ, 画面がある. 最初, ランプは off であり, 画面には空文字列が表示されている.
以下の 種類の操作のうち, つを選んで実行するということを 回以上何度でも行うことができる.
- ミリ秒かけて, a key のみ押す. このとき, ランプの on/off によって, 次のように分岐する.
- ランプが off ならば, 画面の文字列の末尾に が付け足される.
- ランプが on ならば, 画面の文字列の末尾に が付け足される.
- ミリ秒かけて, Shift key, a key を同時に押す. このとき, ランプの on/off によって, 次のように分岐する.
- ランプが off ならば, 画面の文字列の末尾に が付け足される.
- ランプが on ならば, 画面の文字列の末尾に が付け足される.
- ミリ秒かけて, CapsLock key を押す. CapsLock key のランプの off/on が切り替わる.
からなる文字列 が与えられる. 画面の文字列を に一致させるのに必要な最短の時間は何ミリ秒か?
制約
- は からなる長さ 以上 以下の文字列.
解法
まず, 次のことに注意する.
- 操作において, 文字列の長さは増える一方である.
- CapsLock key は 回連続で押す必要がない.
- の最後の文字を入力した後, CapsLock key を押す必要はない.
よって, 調べるべき入力の方法は順に
- CapsLock key を 回押す. または押さない.
- の 文字目をランプの状態に応じたボタンを押す.
- CapsLock key を 回押す. または押さない.
- の 文字目をランプの状態に応じたボタンを押す.
- CapsLock key を 回押す. または押さない.
- の 文字目をランプの状態に応じたボタンを押す.
に限られる.
このことから, ランプの off/on を状態に持った動的計画法で考えれば良いことがわかる.
次のような動的計画法を考える. ただし, とする.
- : 文字目まで入力した際, 文字目入力終了直後のランプの状態が である場合における最短時間
ベースケースは のときで,
である.
遷移式について, ならば, ランプの動きで場合分けすることにより,
となる.
また, の場合も同様にして, ランプの動きで場合分けすることにより,
となる.
そして, 最終解答は となる.
このとき, 時間計算量は 時間となる.