[白俊2805]木を切る(Python)
3917 ワード
1.アイデア
問題では、少なくとも
M
メートルの木がほしいと思っています.切断機で設定した最高の高さです.したがって,二分探索で見つける値はカッターの高さである.カッターの高さは少なくとも1から設定できるので、左側は1に設定します.また、rightは、与えられたツリーの中で最も高い高さに設定されています.その後,各木の高さをmid(カッターの高さ)差減し,結果を統計した.確認合計結果はM
以上で最大値となります.伐採後に得られる木の高さが
M
以上であれば、伐採機の高さが低く、伐採回数が多く、伐採機の高さが向上することを意味する.(i.e.24579142)逆に、伐採された木の高さがleft = mid + 1
を下回ると、伐採機の高さが高すぎることを意味し、伐採回数が少ないため、伐採機の高さが低下する.(i.e. M
)2.コード
import sys
n, m = map(int, sys.stdin.readline().rsplit())
trees = list(map(int, sys.stdin.readline().rsplit()))
left, right = 1, max(trees)
answer = 0
while left <= right:
mid = (left + right) // 2
total = 0
for tree in trees:
remain = tree - mid
if remain > 0: total += remain
if total >= m:
left = mid + 1
answer = max(answer, mid)
else: right = mid - 1
print(answer)
Reference
この問題について([白俊2805]木を切る(Python)), 我々は、より多くの情報をここで見つけました https://velog.io/@study-dev347/백준-2805-나무-자르기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol