57 lines
1.1 KiB
C++
Executable File
57 lines
1.1 KiB
C++
Executable File
#include <cstdio>
|
|
#include <iostream>
|
|
#include <climits>
|
|
|
|
#define MAX_BOXES 50000
|
|
|
|
bool check_candies(int boxes[], int mid, int student_count, int box_count) {
|
|
for (int i = 0; i < box_count; ++i) {
|
|
student_count -= boxes[i] / mid;
|
|
if (student_count < 1)
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
// O(log n)
|
|
int main() {
|
|
int t;
|
|
std::scanf("%d", &t);
|
|
|
|
int boxes[MAX_BOXES];
|
|
|
|
while (t--) {
|
|
int n, k;
|
|
|
|
std::scanf("%d %d", &n, &k);
|
|
|
|
int largest = INT_MIN;
|
|
|
|
for (int i = 0; i < n; i++) {
|
|
std::scanf("%d", &boxes[i]);
|
|
|
|
if (boxes[i] > largest)
|
|
largest = boxes[i];
|
|
}
|
|
|
|
int low = 0;
|
|
int high = largest;
|
|
|
|
while (low < high) {
|
|
int mid = low + (high - low + 1) / 2;
|
|
|
|
if (check_candies(boxes, mid, k, n)) {
|
|
low = mid;
|
|
} else {
|
|
high = mid - 1;
|
|
}
|
|
}
|
|
|
|
std::printf("%d\n", low);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|