#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int min(int a, int b) {
return a < b ? a : b;
}
int max(int a, int b) {
return a > b ? a : b;
}
int main() {
int N, K;
scanf("%d%d", &N, &K);
int** b = (int**)malloc(N * sizeof(int*));
for (int i = 0; i < N; i++) {
b[i] = (int*)malloc(2 * sizeof(int));
}
int d = 0;
for (int i = 0; i < N; i++) {
scanf("%d%d", &b[i][0], &b[i][1]);
if (d < min(b[i][0], b[i][1])) {
d = min(b[i][0], b[i][1]);
}
}
int* a = (int*)calloc(d + 1, sizeof(int));
int left = 1, right = d;
while (true) {
if (left == right - 1 || left == right) {
printf("%d", left);
break;
}
int mid = (left + right) / 2;
int c = 0;
for (int i = 0; i < N; i++) {
c = (min(b[i][0], b[i][1]) / mid) * (max(b[i][0], b[i][1]) / mid) + c;
if (i == N - 1) {
a[mid] = c;
}
}
if (a[mid] >= K) {
left = mid;
} else {
right = mid;
}
}
for (int i = 0; i < N; i++) {
free(b[i]);
}
free(b);
free(a);
return 0;
}
有一个测试点出现WA错误,其它测试点都AC了,看不到测试数据,不知道哪里出问题了