AtCoder Beginner Contest 284 F問題 ABCBAC
問題
提出解答
問題の概要
長さ の英子文字列 と 以上 以下の整数 対して, を
とする.
ただし,
- 英子文字列 の長さを と書く.
- 英小文字列 と に対して, を の 文字目から 文字目の連続英子文字列とする (ただし, の場合は空文字列とする).
- 2つの英子文字列 に対して, をこの順につなげた文字列を と書く.
- 英子文字列 に対して, を反転させた文字列を と書く.
長さ の英小文字列 が与えられるので, となる長さ の英小文字列 及び 以上 以下の整数 は存在するか? 存在するならばその一例を求めよ.
制約
- は長さ の英小文字列
解法
実は以下が成立する.
に対して, 以下は同値である.
- となる長さ の英子文字列 が存在する.
よって, 各 に対して, かどうかを判定すれば良い.
ただし, 長さが である2つの文字列の一致判定には一般的に 時間かかってしまうので, このパートを高速化したい.
これを解決するためにはいくつかの方法があるが, 例えば Rolling Hash によって文字列の一致判定を 時間にすることができる.
従って, この問題を 時間で解くことができた.