蓝桥杯算法-分巧克力
import os
import sys
import math
# 请在此输入您的代码
def process(N,K):
    all_num = 0
    H = []
    W = []
    # 循环输入N块巧克力的形状
    for _ in range(N):
        h, w = map(int, input().split())
        H.append(h)
        W.append(w)
        all_num += h * w
    if all_num < (K * 4):
        return 1
    else:
        flg = int(math.sqrt(all_num // K)) # 能分到的最大块巧克力的上限值
        while flg > 0:
            part_nums = 0
            for j in range(N):
                h = H[j] // flg
                w = W[j] // flg
                part_nums += h * w
            if part_nums >= K:
                return flg
            else:
                flg -= 1

N, K = map(int, input().split())
res = process(N,K)
print(res)

题解:

import os
import sys
# 请在此输入您的代码
def process(N,K):
# 循环输入N块巧克力的形状
    all_num = 0
    H = []
    W = []
    for _ in range(N):
        h, w = map(int, input().split())
        H.append(h)
        W.append(w)
        all_num += h * w
    
    top = max(max(H), max(W)) # 能分到的最大块巧克力的上限值
    left = 1
    right = top
    
    while left < right:
        part_nums = 0
        mid = (left + right + 1)//2 # 计算中间值
        for j in range(N):
            h = H[j] // mid
            w = W[j] // mid
            part_nums += h * w
            if part_nums >= K:
                break
        if part_nums >= K: # 如果能通过,继续查找更大的边长
            left = mid
        else:
            right = mid - 1 # 如果不能通过,查找更小的边长
            
    return left
         
N, K = map(int, input().split())
res = process(N,K)
print(res)

误点:

二分索引设置有问题,导致更新策略出错。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇