Wenn Sie es tatsächlich von Hand versuchen, können Sie sehen, dass die Kth bis Nth in der Reihenfolge angeordnet sind, dann die 1. bis K-1 in der Reihenfolge angeordnet sind und das Gegenteil angeordnet ist. Die 1. bis K-1. Anordnung Natürlich hängt es davon ab, ob die Anzahl der Operationen ungerade oder gerade ist, sodass sie mit dem folgenden Code gelöst werden können.
N, K = map(int, input().split())
S = input()
if (N - K) % 2 == 0:
print(S[K-1:] + S[:K-1][::-1])
else:
print(S[K-1:] + S[:K-1])
Ich dachte darüber nach, das Array neu zu schreiben, während ich den Zeiger bewegte und das Ergebnis basierend auf den Informationen des Zeigers ausgab, aber es war kompliziert und ich war verwirrt in meinem Kopf, also entschied ich mich, die Operation direkt mit deque auszuführen. In diesem Fall gab es nichts Schwieriges, und ich konnte es mit dem folgenden Code lösen.
from collections import deque
N, M = map(int, input().split())
a = list(map(int, input().split()))
S = input()
q = deque(a)
for c in S:
if c == 'L':
t = q.popleft()
q[0] += t
q.append(0)
elif c == 'R':
t = q.pop()
q[-1] += t
q.appendleft(0)
print(*q)
Nachtrag: Ich habe auch versucht, es durch Bewegen des Zeigers zu lösen. Es war kompliziert.
N, M = map(int, input().split())
a = list(map(int, input().split()))
S = input()
p = 0
for c in S:
if c == 'L':
p = max(p - 1, -N + 1)
if p < 0:
a[-p] += a[-p - 1]
a[-p - 1] = 0
elif c == 'R':
p = min(p + 1, N - 1)
if p > 0:
a[N - 1 - p] += a[N - p]
a[N - p] = 0
if p > 0:
print(*([0] * p + a)[:N])
elif p < 0:
print(*(a + [0] * -p)[-p:N - p])
else:
print(*a)
Recommended Posts