106.トッポッキ
5641 ワード
東彬家の餅は長くない.反対に、一袋入れた餅の全長をカッターで切って合わせます.
餅切り機に高さ(
H
)を指定すると、一度に一列に切ることができます.H
より大きい餅は、その上のH
の部分が切られ、低い餅は切られません.切り餅の長さは4、0、0、2 cmの順です.
客は長さ6センチを持って行った.
お客様が
M
の全長を必要とする場合は、少なくともM
のお菓子を得るためのプログラムを作成して、カッターが設定できる最高高さ値を求めます.入力条件
1行目には、餅の個数
N
と、要求される餅の長さM
が与えられる.(1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000)2行目は餅の各高さを示した.
餅の高さの総和はいつも
M
以上で、お客様は必要な量でどれだけの餅を買うことができますか.高さが10億以下の整数またはゼロです.
しゅつりょくじょうけん
M
の餅を持ち帰るために、設定可能な最高高さ値をカッターに出力する.1.パラメトリック検索
n, m = list(map(int, input().split(' ')))
array = list(map(int, input().split()))
start = 0
end = max(array)
result = 0
while(start <= end):
total = 0
mid = (start + end) // 2
for x in array:
#잘랐을 때 떡의 양 계산
if x > mid:
total += x - mid
#떡의 양이 부족한 경우 더 많이 자르기 (왼쪽 탐색)
if total < m:
end = mid - 1
#떡의 양이 충분한 경우 덜 자르기(오른쪽 탐색)
else:
result = mid #최대한 덜 잘랐을 때가 정답이므로, 여기에서 result 기록
start = mid + 1
print(result)
パラメトリックメジャー
:最適化された問題を決定された問題(「はい」または「いいえ」)に変換する解決方法
「必要な条件を満たす最適値を探す問題」では、主にパラメトリック測定が使用されます.
通常、パラメトリック検索タイプはバイナリ検索を使用して解決されます.
この問題の解決策は、適切な高さが見つかるまで切断器の高さ
H
を繰り返し調整することである.カッターの高さ(探索範囲)は1~10億の整数の1つで、このような数を見ると、まずバイナリ探索を考えるべきです.
高さ
H
の探索を探すなら、約31回ですべての状況を考えることができます.N
で最大100万個となるので、バイナリサーチでカッターの高さを変えてH
、交換するたびに全ての餅をチェックすると最大3000万回の演算で問題を解くことができます.H
を決定するプロセス>これらのバイナリ探索過程を繰り返すと答えが得られる.
繰り返して得られる餅の長さの和が所望の餅の長さ以上であるたびに、結果値は中間点(
mid
)に更新される.現在入手可能なトッポッキの量によって切る位置が決まるので、それを再帰的に実現するのは面倒な作業になるかもしれません.
Reference
この問題について(106.トッポッキ), 我々は、より多くの情報をここで見つけました https://velog.io/@corone_hi/106.-떡볶이-떡-만들기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol