Arithmetic Right Shift

2 secs 1024 MB
loop0919's icon loop0919

解説

まず、SS の先頭に SS11 文字目の文字を結合し、SS の末尾の文字を削除する処理を実装しましょう。
C++ では std::string 、Python では str に対する文字列操作を行えば良いです。

ただし、このような算術右シフトを愚直に KK 回繰り返すと、11 テストケースごとに最大 10910^9 回の繰り返し処理を行うことになり、実行時間制限に間に合いません。

そこで、KSK \ge |S| となる場合に SS11 文字目の文字が S|S| 個連続する文字列になることを利用し、繰り返し処理の回数を高々 S|S| 回に抑えると良いです。

繰り返し処理の回数を min(K,S)\min (K, |S|) 回にしたり、KSK \ge |S| の場合を分ける位方針を取ることで、十分高速に動作します。

想定解

想定解(C++)
想定解(Python)