AGC037 - E Reversing and Concatenating

AGC037-Eを解いた。

問題

整数N,K、文字列Sが与えられる。
S ← (S + reverse(S))の長さNの連続部分列
という操作をK回行う。操作後のSとして考えられるもののうち、辞書順最小のものは?

解法

m=S 内の最小文字
と置く。前からできるだけmを連続させることを考えると
max(後ろから連続しているmの数 * 2,S中で連続しているmの数の最大値)*2^{K-1}
個だけ連続させることができる。また、これが上界であることもS中で連続しているmの数の最大値が一回の操作で高々二倍にしかならないことを踏まえれば明らか。
これを踏まえれば操作手順の候補が絞れ、全部試せばよい。(Kが十分に大きい場合にはmN個連続させたものを出力すればよい)

考察

前から小さいのを連続させたいのを踏まえて実験

提出コード

https://atcoder.jp/contests/agc037/submissions/48996634