Loading

[LQ17] 分巧克力

题目链接

题意

把多个长方形分成边长相等的正方形,并且正方形的总数不小于 \(k\)

思路

二分遍历

代码

#include <stdio.h>
#define N 100005
int h[N];
int w[N];

int main(int argc, const char * argv[]) {
    
    int n, k;   // n块, k个人
    scanf("%d%d", &n, &k);
    int i;
    for (i = 0; i < n; i++) {
        scanf("%d%d", &h[i], &w[i]);
    }
    int min = 1;    // 最小边长为1
    int max = N;
    int mid, ans = 1;
    int pieces;
    while (max >= min) {
        mid = min + (max - min) / 2;
        pieces = 0;
        for (i = 0; i < n; i++) {
            pieces += (h[i] / mid) * (w[i] / mid);
        }
        if (pieces < k) {
            max = mid - 1;
        } else {
            min = mid + 1;
            ans = mid;
        }
    }
    printf("%d\n", ans);
    
    return 0;
}
posted @ 2025-03-10 12:55  Chase_Tsai  阅读(4)  评论(0)    收藏  举报