1 条题解

  • 0
    @ 2025-10-10 20:11:59

    C :

    #include <stdio.h>
    #include <stdlib.h>
    #define maxn 30001
    #define swap(A,B,C) (C)=(A),(A)=(B),(B)=(C)
    
    int A[maxn];
    int N;
    
    void adjust_down(int i, int n){
    int s=A[i];
    for(int j = 2*i;j <= n; j *= 2){
        int temp;
        if(A[j]>A[j+1]&&j<n) j++;
        if(s<=A[j]) break;
        swap(A[j],A[j/2],temp);
    }
    }
    
    int proc(){
    int WPL=0;
    for(int i = N/2;i >= 1; i--){
        adjust_down(i, N);
    }
    int n = N;
    while(n>1){
        int temp;
        swap(A[1],A[n],temp);
        n--;
        adjust_down(1,n);
       // int x=A[1],y=A[n+1];
        A[1] += A[n+1];
        WPL += A[1];
        adjust_down(1,n);
    }
    return WPL;
    }
    
    int main()
    {
        scanf("%d",&N);
        for(int i = 1;i <= N; i++){
            scanf("%d",&A[i]);
        }
       int wpl= proc();
        printf("%d\n",wpl);
        return 0;
    }
    

    C++ :

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int a[30005];
    int main()
    {
    	int n,ans=0;
    	cin>>n;
    	for(int i=0;i<n;i++) cin>>a[i];
    	make_heap(a,a+n,greater<int>());
    	for(int i=n;i>1;i--)
    	{
    		pop_heap(a,a+i,greater<int>());
    		pop_heap(a,a+i-1,greater<int>());
    		a[i-2]+=a[i-1]; ans+=a[i-2];
    		push_heap(a,a+i-1,greater<int>()); 
    	}
    	cout<<ans<<endl;
    	return 0; 
    } 
    
    

    Pascal :

    program p26785;
    var a:array[0..10000] of longint;
        n,total:longint;
        i:integer;
    procedure swap(var a,b:longint);
      var t:integer;
    begin
      t:=a; a:=b; b:=t;
    end;
    procedure quick_sort(m,n:integer);
      var i,j,x:integer;
    begin
      i:=m; j:=n; x:=a[(i+j) div 2];
      repeat
        while a[i]>x do inc(i);
        while x>a[j] do dec(j);
        if i<=j then begin
                       swap(a[i],a[j]);
                       inc(i);
                       dec(j);
                      end;
      until i>j;
      if m<j then quick_sort(m,j);
      if i<n then quick_sort(i,n);
    end;
    procedure insert_sort(n:integer);
    var i,j:integer;
    begin
      i:=n-1;
      a[0]:=a[n];
      while a[i]<a[0] do
         begin
           a[i+1]:=a[i];
           dec(i)end;
           a[i+1]:=a[0]
         end;
    begin
      readln(n);
      for i:=1 to n do  read(a[i]);
      quick_sort(1,n);
      for i:=1 to n-1 do
        begin
          a[n-i]:=a[n-i]+a[n-i+1];
          a[n-i+1]:=0;
          inc(total,a[n-i]);
          insert_sort(n-i)
        end;
        writeln(total);
    end.
    
    
    • 1

    信息

    ID
    1083
    时间
    1000ms
    内存
    512MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者