まず、 の先頭に の 文字目の文字を結合し、 の末尾の文字を削除する処理を実装しましょう。
C++ では std::string
、Python では str
に対する文字列操作を行えば良いです。
ただし、このような算術右シフトを愚直に 回繰り返すと、 テストケースごとに最大 回の繰り返し処理を行うことになり、実行時間制限に間に合いません。
そこで、 となる場合に の 文字目の文字が 個連続する文字列になることを利用し、繰り返し処理の回数を高々 回に抑えると良いです。
繰り返し処理の回数を 回にしたり、 の場合を分ける位方針を取ることで、十分高速に動作します。
xxxxxxxxxx
void solve() {
int K;
std::string S;
std::cin >> K >> S;
for (int i = 0; i < std::min(K, (int)S.size()); i++) {
S = S[0] + S;
S.pop_back();
}
std::cout << S << std::endl;
}
int main() {
int T;
std::cin >> T;
for (int i = 0; i < T; i++) {
solve();
}
return 0;
}
xxxxxxxxxx
def solve():
K = int(input())
S = input()
for _ in range(min(K, len(S))):
S = S[0] + S
S = S[:-1]
print(S)
T = int(input())
for _ in range(T):
solve()