用桶排序却只过了样例 急急急
查看原帖
用桶排序却只过了样例 急急急
866969
telankesi楼主2022/12/16 22:55
#include <stdio.h>
int k,x,num,n1,n2,a1[30001]={0}, a2[30001] = {0}, t[20001]={0}, w;
long long sum;
int main()
{
	scanf("%d",&num);

	for (int i=1;i<=num;i++)
	{
		
		scanf("%d",&x);
		t[x]++;//桶
	}

	for (int i=1;i<=20000;i++)
	{
		a2[i] = 300010;
		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("%lld",sum);
}
2022/12/16 22:55
加载中...