私はAtCoderの灰色です。現在、茶色を目指して健闘中です。
ただ、私の理解度が低すぎて今回練習で解いたABC212のC問題の解説をいくら読んでも理解できませんでした。しかし、奮闘の結果自力でなんとか解くことができました。
あくまでも今後のために記録として残しておきたいと思ったので、自分で解説を書くことにしました。
開発言語はPythonです。
n , m = map(int,input().split())
a = list(map(int,input().split()))
b = list(map(int,input().split()))
c_min = 10**9
for i in range(n):
for j in range(m):
c_min = min(c_min,abs(a[i]-b[j]))
print(c_min)
上記の全検索だとタイムオーバー(TLE)になってしまいます。
そこで
Aリスト、Bリスト共にソートしたものを、i及びjの小さい順にAとBを比較、AまたはBの小さい側は一つ右にシフトして、再びAとBを比較します。それを繰り返します。
①A1とB1を比較、Aが小さい
②Aが右に移動(i += 1)
③A2とB1を比較、Bが小さい
④Bが右に移動(j += 1)
⑤A2とB2を比較、Aが小さい
⑥Aが右に移動(i += 1)
⑦A3とB2を比較
その間にAi-Bjの値を比較して、最も差が小さい数字を出力します。
n , m = map(int,input().split())
a = list(map(int,input().split()))
b = list(map(int,input().split()))
a.sort()
b.sort()
c = 10**9
i = j = 0
while i < n and j < m:
c = min(c,abs(a[i]-b[j]))
if a[i] < b[j]:
i += 1
else:
j += 1
print(c)
※コメント投稿者のブログIDはブログ作成者のみに通知されます