50分求调
查看原帖
50分求调
965761
zhang___z楼主2023/12/22 22:23
#include<bits/stdc++.h>
using namespace std;
long long ans=0;
int a[20010],b[20010];
int len;
void hb()
{
	if(len==1)
		return;
	sort(a+1,a+1+len);
//	for(int i=1;i<=len;i++)
//		cout<<a[i]<<" ";
//	cout<<endl;
//	cout<<len<<endl;
//	for(int i=1;i<=len;i++)
//		cout<<b[i]<<" ";
//	cout<<endl;
	if(len%2==0)
	{
		for(int i=1,j=1;i<len;i+=2,j++)
		{
			ans+=a[i]+a[i+1];
			b[j]=a[i]+a[i+1];
		}
		len/=2;	
		swap(a,b);
		hb();
	}
	else
	{
		for(int i=1,j=1;i<len;i+=2,j++)
		{
			ans+=a[i]+a[i+1];
			b[j]=a[i]+a[i+1];	
		}
		int x=len;
		len+=1;
		len/=2;	
		b[len]=a[x];
		swap(a,b);
		hb();
	}
}
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	len=n;
	hb();
	cout<<ans;
	return 0;
}
2023/12/22 22:23
加载中...