ディジタルカード
白駿10815
タイムアウトに最適->バイナリ・ナビゲーションの使用
李辰が探している姿勢を覚えてください.
バイナリプローブ関数を宣言し、バイナリプローブはstart、end、midの3つの変数を使用します.start<=endの間、while文を繰り返します.また、バイナリナビゲーションはソート時に使用できることを覚えておいてください.
方法バイナリ検索を利用します。
import sys
n = int(input())
have = list(map(int, sys.stdin.readline().split()))
m = int(input())
arr = list(map(int, sys.stdin.readline().split()))
# 이진탐색은 정렬되어 있는 상태에서 쓸 수 있다.
have = sorted(have)
def bisearch(n):
start = 0
end = len(have)-1
while (start<=end):
mid = (start+end)//2
if have[mid] == n:
return 1
elif n > have[mid]:
start = mid+1
elif n < have[mid]:
end = mid-1
return 0
for ele in arr:
print(bisearch(ele), end=" ")
have listは尚根のデジタルカードです.arr listは尚根がデジタルカードを持っているかどうかを求めるカードです.
arrの要素がhaveリストにあるかどうかを確認するだけであれば、haveリストの要素を迂回してチェックする必要があります.これを一つ一つチェックしないで、中間値を設定して、この値より大きい範囲で検索し、この値より小さい範囲で検索します.
したがって、ナビゲーションが必要なhaveリストをソートし、haveの最初のインデックス、最後のインデックスをstartおよびendに設定してバイナリナビゲーションを行います.
Reference
この問題について(ディジタルカード), 我々は、より多くの情報をここで見つけました https://velog.io/@sezeom/숫자-카드テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol