Official

A - ST and TS Palindrome Editorial by chinerist


\(S\) を左右反転した文字列を \(rev(S)\) と書きます。また、文字列 \(S, S'\) をこの順で結合して得られる文字列を \(S+S'\) と書きます。

[1] \(K < 2N\) の場合

\(K < 2N\) の場合は \(S'\) の左から \(\min(N,\ K)\) 文字が \(rev(S)\) と一致し、右から \(\min(N,\ K)\) 文字が \(rev(S)\) と一致しなければならないので、条件を満たす \(S'\) の候補は高々 \(1\) つに絞りこめます。よってそのような \(S'\) が条件を満たすか実際に確認すればいいです。

[2] \(2N \leq K\) の場合を [1] に帰着する

\(2N \leq K\) の場合も同様の考察から、問題は以下のように言い換えることができます。

\(S+S',\ S'+S\) がいずれも回文となるような \(S'\ (|S'|=K)\) が存在

\(\iff\) \(S+rev(S)+S'+rev(S),\ rev(S)+S'+rev(S)+S\) がいずれも回文となるような \(S'\ (|S'|=K-2N)\) が存在

\(\iff\) \(rev(S)+S',\ S'+rev(S)\) がいずれも回文となるような \(S'\ (|S'|=K-2N)\) が存在

\(\iff\) \(rev(rev(S)+S'),\ rev(S'+rev(S))\) がいずれも回文となるような \(S'\ (|S'|=K-2N)\) が存在

\(\iff\) \(rev(S')+S,\ S+rev(S')\) がいずれも回文となるような \(S'\ (|S'|=K-2N)\) が存在

\(\iff\) \(S'+S,\ S+S'\) がいずれも回文となるような \(S'\ (|S'|=K-2N)\) が存在

よって \(K\)\(K \bmod 2N\) で置き換えてよく、 \(K < 2N\) の場合に帰着することができます。

以上よりこの問題はテストケースあたり \(O(N)\) で解くことができます。

posted:
last update: