Submission #3969139


Source Code Expand

*S, = map(ord, input())
*T, = map(ord, input())
LS = len(S); LT = len(T)

dp = [[-1]*(LT+1) for i in range(LS+1)]
for i in range(LS-1, -1, -1):
    for j in range(LT-1, -1, -1):
        if S[i] == T[j]:
            dp[i][j] = max(dp[i+1][j+1] + 1, dp[i+1][j], dp[i][j+1])
        else:
            dp[i][j] = max(dp[i+1][j], dp[i][j+1])
i = j = 0
ans = []
while i < LS and j < LT:
    if S[i] == T[j]:
        if dp[i][j] == dp[i+1][j+1] + 1:
            ans.append(S[i])
            i += 1; j += 1
        elif dp[i][j] == dp[i+1][j]:
            i += 1
        else:
            j += 1
    else:
        if dp[i][j] == dp[i+1][j]:
            i += 1
        else:
            j += 1
print(*map(chr, ans), sep='')

Submission Info

Submission Time
Task F - LCS
User yaketake08
Language PyPy3 (2.4.0)
Score 100
Code Size 741 Byte
Status AC
Exec Time 507 ms
Memory 115292 KiB

Judge Result

Set Name All
Score / Max Score 100 / 100
Status
AC × 18
Set Name Test Cases
All 0_00, 0_01, 0_02, 0_03, 1_00, 1_01, 1_02, 1_03, 1_04, 1_05, 1_06, 1_07, 1_08, 1_09, 1_10, 1_11, 1_12, 1_13
Case Name Status Exec Time Memory
0_00 AC 172 ms 38256 KiB
0_01 AC 172 ms 38256 KiB
0_02 AC 172 ms 38256 KiB
0_03 AC 182 ms 38256 KiB
1_00 AC 174 ms 38256 KiB
1_01 AC 172 ms 38256 KiB
1_02 AC 423 ms 114140 KiB
1_03 AC 373 ms 111964 KiB
1_04 AC 389 ms 112348 KiB
1_05 AC 359 ms 111964 KiB
1_06 AC 412 ms 113756 KiB
1_07 AC 503 ms 114780 KiB
1_08 AC 507 ms 114524 KiB
1_09 AC 492 ms 115292 KiB
1_10 AC 480 ms 113628 KiB
1_11 AC 480 ms 114652 KiB
1_12 AC 461 ms 111964 KiB
1_13 AC 461 ms 113500 KiB