ディジタルカード


白駿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に設定してバイナリナビゲーションを行います.