我击败了所有人!!!(喜)
2025-06-30 17:36:09
发布于:浙江
15阅读
0回复
0点赞
#include <stdio.h>
#include <stdlib.h>
long long findMax(int *trees, int n) {
long long max = 0;
for (int i = 0; i < n; i++) {
if (trees[i] > max) {
max = trees[i];
}
}
return max;
}
int isFeasible(int *trees, int n, long long m, long long h) {
long long wood = 0;
for (int i = 0; i < n; i++) {
if (trees[i] > h) {
wood += trees[i] - h;
if (wood >= m) {
return 1;
}
}
}
return wood >= m;
}
int main() {
int n;
long long m;
scanf("%d %lld", &n, &m);
int *trees = (int *)malloc(n * sizeof(int));
if (trees == NULL) {
printf("内存分配失败\n");
return 1;
}
for (int i = 0; i < n; i++) {
scanf("%d", &trees[i]);
}
long long left = 0;
long long right = findMax(trees, n);
long long maxHeight = 0;
while (left <= right) {
long long mid = left + (right - left) / 2;
if (isFeasible(trees, n, m, mid)) {
maxHeight = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
printf("%lld\n", maxHeight);
free(trees);
return 0;
}
这里空空如也
有帮助,赞一个