70分求调
查看原帖
70分求调
1576696
KatsuraJiu楼主2025/2/1 16:24

有三个点WA,是哪里的问题

#include <stdio.h>
#include <stdlib.h>

int func(int h[], int x);
int compare(const void* a, const void* b);

int main() {
    int w, n;
    int i;
    int h[1000006] = { 0 };
    int result;
    int left, right, mid;
    int current_sum;

    scanf("%d %d", &w, &n);

    for (i = 0; i < w; i++) {
        scanf("%d", &h[i]);
    }

    qsort(h, w, sizeof(int), compare);

    left = 0;
    right = h[0];

    while (left <= right) {
        mid = left + (right - left) / 2; 
        current_sum = func(h, mid);
        if (current_sum >= n) {
            result = mid;
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }

    printf("%d", result);

    return 0;
}

int func(int h[], int x) {
    int i;
    long long sum = 0; 

    for (i = 0; h[i] > x; i++) {
        sum += (h[i] - x);
    }

    return (int)sum; 
}

int compare(const void* a, const void* b) {
    return (*(int*)b - *(int*)a); 
}
2025/2/1 16:24
加载中...