AtCoder Beginner Contest 149 D - Prediction and Restriction【Python】

https://atcoder.jp/contests/abc149/tasks/abc149_d

AtCoder ProblemsでDifficulty: 719、Solve Probability: 37%でした。

K回より前は単純に勝てる手を出し、 K回以降は現在勝てる手をK回前に出していなければその手を出し、K回前に出していた場合は残りの2つの手の内、K回後に勝てる方の手は使わないようにすると、最大の得点が得られると考え解くことができました。

下記はかなり冗長なコードとなっています。

N, K = map(int, input().split())
R, S, P = map(int, input().split())
T = list(input())
h = []
ans = 0
for i in range(N):
    # 相手の手
    v = T[i]
    # K回以降は、現在勝てる手をK回前に出していなければその手を出し、
    # K回前に出していた場合は、K回後に勝てる方の手は使わない
    if i-K >= 0:
        # K回前に出した手
        pre_h = h[i-K]
        if v == 'r':
            if pre_h != 'p':
                ans += P
                h.append('p')
            else:
                if i+K < N:
                    next_v = T[i+K]
                    if next_v == 's':
                        h.append('s')
                    elif next_v == 'p':
                        h.append('r')
                    else:
                        h.append('s')
                # K回後のじゃんけんが行わなければ何でも良い
                else:
                    h.append('s')
        elif v == 's':
            if pre_h != 'r':
                ans += R
                h.append('r')
            else:
                if i+K < N:
                    next_v = T[i+K]
                    if next_v == 'r':
                        h.append('s')
                    elif next_v == 'p':
                        h.append('p')
                    else:
                        h.append('s')
                else:
                    h.append('s')
        elif v == 'p':
            if pre_h != 's':
                ans += S
                h.append('s')
            else:
                if i+K < N:
                    next_v = T[i+K]
                    if next_v == 'r':
                        h.append('r')
                    elif next_v == 's':
                        h.append('p')
                    else:
                        h.append('r')
                else:
                    h.append('r')
    # K回より前は単純に勝てる手を選ぶ
    else:
        if v == 'r':
            h.append('p')
            ans += P
        elif v == 's':
            h.append('r')
            ans += R
        elif v == 'p':
            h.append('s')
            ans += S
print(ans)