木を切る
白駿2805
複文を用いて,バイナリ探索の方法で問題を解く.バイナリサーチは対分サーチであるため,シーケンスサーチよりもはるかに短い.しかし、タイムアウトが多すぎるため、python 3ではなくpython 3でコミットされた問題です.pypy 3がより速く実行されることを知っています.
方法重複文によるバイナリ・ナビゲーション
n, h = map(int, input().split())
# 한 줄에 여러개 받기
tree = list(map(int, input().split()))
# 자를 수 있는 나무 길이의 범위
start = 0
end = max(tree)
while(start <= end):
mid = (start + end)//2 #이진탐색을 위해 반으로 쪼개기
sum = 0
for ele in tree:
if ele > mid :
sum += ele-mid #그때그때 mid길이만큼 나무를 잘라 남은 길이의 합을 구하기
if sum >= h: #최소 h만큼은 잘라야하기 때문에 합이 h보다 크거나 같으면
max_h = mid #그때의 mid를 기억해준다.(반복문은 조건이 맞는 동안 계속 돌것이므로 알아서 최종 mid의 최댓값이 저장)
start = mid + 1 #sum이 너무 크면 더 많이 잘라야하기때문에 자를 수 있는 최소 길이를 높여준다.
elif sum < h: #sum이 너무 작으면 너무 많이 자른것이므로 자를 수 있는 최대 길이를 낮춰준다.
end = mid - 1
print(max_h) #최대로 자를 수 있는 길이를 출력한다.
バイナリナビゲーション
二つに分かれて探求する.ステップごとの検索範囲を半分に減らし、正解に近い検索方法は、検索方法の中で非常に速いアルゴリズムです.内部のデータは、開始、中間、終了の3つの変数を使用するために整列する必要があります.
バイナリ探索の概念を学ぶとき、私はこの問題を理解しました.
https://nerogarret.tistory.com/58ここではバイナリ探索の問題についてよく説明しています.
Reference
この問題について(木を切る), 我々は、より多くの情報をここで見つけました https://velog.io/@sezeom/나무-자르기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol