問題一覧 > 通常問題

No.3001 ヘビ文字列

レベル : / 実行時間制限 : 1ケース 1.500秒 / メモリ制限 : 512 MB / スペシャルジャッジ問題 (複数の解が存在する可能性があります)
タグ : / 解いたユーザー数 19
作問者 : addeight2addeight2 / テスター : 👑 p-adicp-adic
0 ProblemId : 11721 / 自分の提出
問題文最終更新日: 2024-12-31 19:32:11

問題文

文字列 $T$ が「ヘビ文字列」であるということを次のように定義します。

$N$ を $T$ の長さとして、ある整数 $i\ (1 \le i \le N - 1)$ が存在して、$T$ を $i$ 文字目と $i + 1$ 文字目の間で分割し、前半後半を入れ替えたときに元の文字列 $T$ に戻る。
つまり $T = T_{i + 1} T_{i + 2} ... T_N T_1 T_2 ... T_i$ を満たす。 ($T_i$ は $T$ の $i$ 文字目の文字を指す)

英大文字からなる文字列 $S$ が与えられます。$N$ を $S$ の長さとして、あなたは次の操作を何度でも繰り返すことができます。

整数 $i\ (1 \le i \le N)$ を選び、$S_i$ を好きな英大文字で置き換える。

出来るだけ少ない回数の操作で $S$ をヘビ文字列 $S^\prime$ にしてください。

入力

$S$

$S$ は英大文字からなる文字列。
$S$ の長さ $|S|$ は $2 \le |S| \le 2 \times 10^6$.

出力

$S^\prime$

答えとなるような $S^\prime$ が複数存在する場合はどれを出力しても構いません。
最後に改行してください。

注意

  • 提出したプログラムが TLE (Time Limit Exceeded; 時間切れ) となる場合は、アルゴリズムをもっと効率的にできるかも検討してください。
  • 使用する言語によっては、正しいアルゴリズムが書けていても TLE になることがあります。 Python をお使いの方は、一般的な Python 処理系 (CPython) ではなく、より早い処理系の PyPy を使うことをおすすめします。 C++, PyPy では制限時間に間に合うことは確認済みです。

サンプル

サンプル1
入力
ABCBBBACC
出力
ABCABCABC

4, 6, 8 文字目をそれぞれ A, C, B と置換すると ABCABCABC となり、ヘビ文字列になります。 (3 文字目と 4 文字目の間で区切るとよい。) 3 文字未満の置き換えでヘビ文字列を作ることはできないため、ABCABCABC が答えとなります。

サンプル2
入力
ABCDEFG
出力
AAAAAAA

2 文字目から 7 文字目までを A で置換すると AAAAAAA となり、これはヘビ文字列です。 (1 文字目と 2 文字目の間で区切ればよい。) 6 文字未満の文字の置き換えで ABCDEFG をヘビ文字列にすることはできないため、AAAAAAA が正解となります。 (BBBBBBB なども正解となることに注意してください。)

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。