2 条题解

  • 0
    @ 2025-12-19 20:20:53
    #include <bits/stdc++.h>
    using namespace std;
    int n,m,ans;
    priority_queue<int,vector<int>,greater<int>>q;
    int main()
    {
        cin>>m;
        for(int i=1;i<=m;i++)
        {
            int t;
            cin>>t;
            q.push(t);
        }
        while(q.size()>1)
        {
            int t1=q.top();
            q.pop();
            int t2=q.top();
            q.pop();
            ans+=t1 + t2;
            q.push(t1+t2);
        }
        cout<<ans<<endl;
        return 0;
    }
    
    
    
    • -1
      @ 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
      标签
      (无)
      递交数
      141
      已通过
      47
      上传者