10分!!!求助(Sort+插入排序)
查看原帖
10分!!!求助(Sort+插入排序)
570516
C9H10O楼主2022/8/15 20:52

代码:

#include <bits/stdc++.h>
using namespace std;
int input[10005];
int main()
{
	unsigned long long n,sum=0;//害怕不够
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>input[i];
	sort(input+1,input+1+n);//使之变成递增序列
	int k;
	for(int i=1;i<=2*n-1;i++)
	{
		k=input[1]+input[2];//合并
		sum+=k;
		if(n<=2)
		{
			break;
		}//只有两个或两个以下可合并的堆
		for(int j=1;j<=n-2;j++)
			input[j]=input[j+2];//插入排序,先填充两个堆合并的空位
		bool tip=0;
		for(int j=n-2;j>=1;j--)
		{
			if(k>=input[j])
			{
				tip=1;
				input[j+1]=k;
				break; 
			} 
			else//第一个比合并后的堆小的值
				input[j+1]=input[j];//插入
		}
		if(!tip)
			input[1]=k;//没找到比合并后的堆更小的值,则插在数组首尾。
		n--;//堆减少一个
	}
	cout<<sum;//输出消耗
	return 0;
}

为图方便,为大佬们加注释

2022/8/15 20:52
加载中...