到底怎么回事,按题解桶排序写的,就过了样例
查看原帖
到底怎么回事,按题解桶排序写的,就过了样例
866969
telankesi楼主2023/1/1 21:25
#include <stdio.h>

int k, x, num, n1, n2, a1[30001] = { 0 }, a2[30001] = { 0 }, t[20001] = { 0 }, w;
int sum;
int main()
{
    scanf("%d", &num);

    for (int i = 1; i <= num; i++)
    {

        scanf("%d", &x);
        t[x]++;//桶
    }
   
    for (int i = 0; i <= 20000; i++)
    {
        a1[i] = 10000000;
        a2[i] = 10000000;
        while (t[i])//通排序
        {
            t[i]--;
            a1[++n1] = i;
        }
    }
    int i = 1, j = 1;
    k = 1;
    while (k < num)
    {
        if (a1[i] < a2[j])//取最小值
        {
            w = a1[i];
            i++;
        }
        else
        {
            w = a2[j];
            j++;
        }
        if (a1[i] < a2[j])//取第二次
        {
            w += a1[i];
            i++;
        }
        else
        {
            w += a2[j];
            j++;
        }
        a2[++n2] = w;//加入第二个队列
        k++;//计算合并次数
        sum += w;//计算价值
    }
    printf("%d", sum);
}
2023/1/1 21:25
加载中...