1 条题解

  • 0
    @ 2025-12-10 16:33:03

    O(n logn)做法

    #include<bits/stdc++.h>
    #define ll long long
    #define un unsigned
    #define int long long
    #define db double
    #define inf 1000000000000000
    #define st string
    #define ct const
    #define xh(a,b,c) for(int a=b;a<=c;a++)
    #define wx while(1)
    #define dn(a,b,c) for(int a=b;a>=c;a--)
    using namespace std;
    vector<int>v;
    int n;
    int x;
    int a[10001]; 
    int ans;
    void check(int k){
    	int l=0,r=v.size()-1;
    	int t=INT_MAX;
    	while(l<=r){
    		int mid=l+(r-l)/2;
    		if(v[mid]>=k&&mid<t)t=mid;
    		if(v[mid]>=k)r=mid-1;
    		else l=mid+1;
    	}
    	if(t==INT_MAX)v.push_back(k);
    	else v.insert(v.begin()+t,k);
    }
    signed main(){
    	cin>>n;
    	xh(i,1,n)cin>>a[i];
    	sort(a+1,a+n+1);
    	xh(i,1,n)v.push_back(a[i]);
    	xh(i,1,n){
    		if(v.size()==1){
    			cout<<ans;
    			return 0;
    		}
    		int t=v[0]+v[1];
    		ans+=t;
    		v.erase(v.begin()+0);
    		v.erase(v.begin()+0);
    		check(t);
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    99
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    (无)
    递交数
    124
    已通过
    38
    上传者