分巧克力

题目 分巧克力

image-4d3386a8

思路分析

先想能否二分 怎么二分 再想如何check

代码实现

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'

const int N=1e5+10;
int H[N],W[N];
int n,k;

bool check(int mid){
    int sum=0;
    for(int i=1;i<=n;i++)
        sum+=(H[i]/mid)*(W[i]/mid);
    if(sum>=k)
        return true;
    return false;
}

int main()
{
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    cin>>n>>k;
    int maxv=-1;
    for(int i=1;i<=n;i++){
        cin>>H[i]>>W[i];
        maxv=max({maxv,H[i],W[i]});
    }

    int l=1,r=maxv;
    while(l<r){
        int mid=l+r+1>>1;
        if(check(mid))  l=mid;
        else    r=mid-1;
    }
    cout<<r<<endl;
    return 0;
}

同类题型

视频讲解


⬅️ 农田灌溉 🏠 00-刷题理模型 ➡️ 分配给商店的最多商品的最小值