AtCoder Beginner Contest 242 E問題 (∀x∀)
問題
提出解答
問題の概要
以下を満たす文字列 の個数を求めよ.
- は英大文字からなる長さ の文字列
- は辞書式の意味で である回分.
※ 個のマルチケース
制約
- は英大文字からなる長さ の文字列
- 個のケースにおける の総和を とすると, である.
解法
長さ の回分は先頭 文字が決定すると, 一意に定まってしまう. ここで, の先頭 文字の部分列を とする.
ここで, 長さが の文字列 に対して, を
とする. ただし, 文字列 に対して,
- で をこの順に連結させた文字列.
- で から最後の文字を取り除いた文字列.
- で を逆にした文字列.
とする.
すると, 以下の事がわかる.
- 任意の長さが の回分 はある長さが の文字列 が存在して, となる.
- 長さが の文字列 において, ならば, である.
このことから, 求めるべき場合の数は
長さ の文字列 の内, となるような文字列の数
と一致する.
そして, 長さ の文字列 において,
- ならば,
- ならば,
であることがわかる. となる長さ の文字列 の数については, と置き換えた 進法としてみることで求めることができる.
残りは のときの と との大小関係であるが, これはそのまま愚直に判定することで 時間で判定できる.
以上から, 答えは となる長さ の文字列の数に, ならば を足した整数となる. 時間計算量は である.