Problem p03490 (python)

Fixed submission:
s = input() + "T"
x, y = map(int, input().split())
N = len(s)



for i in range(N):
    if s[i] == "F":
        x -= 1
    else:
        cnt_Y = True
        index = i + 1
        break

steps_X = []
steps_Y = []

while index < N:
    cnt = 0
    for j in range(index, N):
        if s[j] == "F":
            cnt += 1
        else:
            if cnt_Y and cnt != 0:
                steps_Y.append(cnt)
            elif not cnt_Y and cnt != 0:
                steps_X.append(cnt)
            cnt_Y = not cnt_Y
            index = j
            break
    index += 1
    
K = 10000
dp = [set() for _ in range(K)]
dp[0].add(0)

for i, t in enumerate(steps_X):
    for tmp in dp[i]:
        dp[i+1].add(tmp+t)
        dp[i+1].add(tmp-t)

# print(dp[len(steps_X)])
if x not in dp[len(steps_X)]:
    print("No")
    import sys
    sys.exit()

dp = [set() for _ in range(K)]
dp[0].add(0)
for i, t in enumerate(steps_Y):
    for tmp in dp[i]:
        dp[i+1].add(tmp+t)
        dp[i+1].add(tmp-t)

if y not in dp[len(steps_Y)]:
    print("No")
    import sys
    sys.exit()


print("Yes")

Buggy submission (verdict: Runtime Error):
s = input() + "T"
x, y = map(int, input().split())
N = len(s)



for i in range(N):
    if s[i] == "F":
        x -= 1
    else:
        cnt_Y = True
        index = i + 1
        break

steps_X = []
steps_Y = []

while index < N:
    cnt = 0
    for j in range(index, N):
        if s[j] == "F":
            cnt += 1
        else:
            if cnt_Y and cnt != 0:
                steps_Y.append(cnt)
            elif not cnt_Y and cnt != 0:
                steps_X.append(cnt)
            cnt_Y = not cnt_Y
            index = j
            break
    index += 1


K = 8000*2+5
dp = [[False] * (8000*2+1) for _ in range(2)]
dp[0][0] = True


for i, t in enumerate(steps_X):
    trues_p = [idx + t for idx, v in enumerate(dp[i%2]) if v == True]
    trues_n = [idx - t for idx, v in enumerate(dp[i%2]) if v == True]
    for tr in trues_p:
        dp[(i+1)%2][tr] = True
    for tr in trues_n:
        dp[(i+1)%2][tr] = True

if dp[len(steps_X) %2][x] == False:
    print("No")
    import sys
    sys.exit()

dp = [[False] * (8000*2+1) for _ in range(2)]
dp[0][0] = True

for i, t in enumerate(steps_Y):
    trues_p = [idx + t for idx, v in enumerate(dp[i%2]) if v == True]
    trues_n = [idx - t for idx, v in enumerate(dp[i%2]) if v == True]
    for tr in trues_p:
        dp[(i+1)%2][tr] = True
    for tr in trues_n:
        dp[(i+1)%2][tr] = True

if dp[len(steps_Y) %2][y] == False:
    print("No")
    import sys
    sys.exit()

print("Yes")

Buggy submission (verdict: Runtime Error):
s = input() + "T"
x, y = map(int, input().split())
N = len(s)



for i in range(N):
    if s[i] == "F":
        x -= 1
    else:
        cnt_Y = True
        index = i + 1
        break

steps_X = []
steps_Y = []

while index < N:
    cnt = 0
    for j in range(index, N):
        if s[j] == "F":
            cnt += 1
        else:
            if cnt_Y and cnt != 0:
                steps_Y.append(cnt)
            elif not cnt_Y and cnt != 0:
                steps_X.append(cnt)
            cnt_Y = not cnt_Y
            index = j
            break
    index += 1

    
K = 8000*2+1
dp = [[False] * (8000*2+1) for _ in range(2)]
dp[0][0] = True


for i, t in enumerate(steps_X):
    trues_p = [idx + t for idx, v in enumerate(dp[i%2]) if v == True]
    trues_n = [idx - t for idx, v in enumerate(dp[i%2]) if v == True]
    for tr in trues_p:
        dp[(i+1)%2][tr] = True
    for tr in trues_n:
        dp[(i+1)%2][tr] = True

if dp[len(steps_X) %2][x] == False:
    print("No")
    import sys
    sys.exit()

dp = [[False] * (8000*2+1) for _ in range(2)]
dp[0][0] = True

for i, t in enumerate(steps_Y):
    trues_p = [idx + t for idx, v in enumerate(dp[i%2]) if v == True]
    trues_n = [idx - t for idx, v in enumerate(dp[i%2]) if v == True]
    for tr in trues_p:
        dp[(i+1)%2][tr] = True
    for tr in trues_n:
        dp[(i+1)%2][tr] = True

if dp[len(steps_Y) %2][y] == False:
    print("No")
    import sys
    sys.exit()

print("Yes")