[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;
}

浙公网安备 33010602011771号