求助,为什么只有20分,自测没有问题
查看原帖
求助,为什么只有20分,自测没有问题
447907
easine_1楼主2022/9/7 15:10
//p1090

#include <stdio.h>
#include <memory.h>

#define MAX 20005

int  num_fruit[10005] = {0};
int  node[10005];

void  quicksort(int  *num, int  len);
void swap(int *a, int *b);

int main()
{
    int n = 0;
    long ans = 0;

    memset(node,MAX,sizeof(node));

    scanf("%d",&n);
    for(int i = 0; i < n; i++)
    {
        scanf("%d",&num_fruit[i]);
    }

    quicksort(num_fruit,n);
    num_fruit[n] = MAX;
    for(int i = 0, j = 0, k = 0; k < n - 1 ; )
    {
        int tmp = 0;
        tmp = (node[j] < num_fruit[i]) ? node[j++] : num_fruit[i++];
        tmp += (node[j] < num_fruit[i]) ? node[j++] : num_fruit[i++];
        ans += tmp;
        node[k++] = tmp;
    }
    printf("%ld",ans);
}

void  quicksort(int  *num, int  len)
{
    if (len <= 1)
        return;
    const int  pivot = num[len >> 1];
    int i = 0, j = 0, k = len;
    while (i < k)
    {
        if (num[i] < pivot)
            swap(&num[i++],&num[j++]);
        else if (num[i] > pivot)
            swap(&num[i],&num[--k]);
        else
            i++;
    }
    quicksort(num, j);
    quicksort(num + k, len - k);
}

void swap(int *a, int *b)
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}
2022/9/7 15:10
加载中...