結果
問題 | No.1818 6 Operations |
ユーザー |
![]() |
提出日時 | 2022-01-22 20:12:01 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,815 bytes |
コンパイル時間 | 503 ms |
コンパイル使用メモリ | 12,672 KB |
実行使用メモリ | 310,528 KB |
最終ジャッジ日時 | 2024-11-27 21:16:23 |
合計ジャッジ時間 | 82,701 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 10 TLE * 20 |
ソースコード
import sys#input = sys.stdin.readline #文字列につけてはダメinput = sys.stdin.buffer.readline #文字列につけてはダメ#sys.setrecursionlimit(1000000)#import bisect#import itertools#import random#from heapq import heapify, heappop, heappush#from collections import defaultdict#from collections import deque#import copy#import math#from functools import lru_cache#@lru_cache(maxsize=None)#MOD = pow(10,9) + 7#MOD = 998244353#dx = [1,0,-1,0]#dy = [0,1,0,-1]def Levenshtein_distance(A,B):#dp[i][j], Aがi文字目、Bがj文字目までにおける最小処理回数INF = pow(10,18)n = len(A); m = len(B)dp = [[INF]*(m+1) for _ in range(n+1)]#初期化の方法が特殊。片方が0でもう片方がi文字なら最小処理回数はi。for i in range(n+1):dp[i][0] = ifor i in range(m+1):dp[0][i] = ifor i in range(n): #i = 0つまり、0文字目なのでdp[1][1]からスタートfor j in range(m):if A[i] == B[j]: #同じ場合そのままか、片方が一つずれているところから追加挿入。dp[i+1][j+1] = min(dp[i][j],dp[i][j+1]+1,dp[i+1][j]+1)else: #異なる場合i文字目を交換か、片方が一つずれているところから追加挿入。dp[i+1][j+1] = min(dp[i][j]+1,dp[i][j+1]+1, dp[i+1][j]+1)return dp[n][m]def change(X):ret = []for x in X:ret.append(0)for _ in range(x):ret.append(1)return retdef main():N,M = map(int,input().split())A = list(map(int,input().split()))B = list(map(int,input().split()))C = change(A)D = change(B)#print(C,D)ans = Levenshtein_distance(C,D)print(ans)if __name__ == '__main__':main()