1 条题解

  • 0
    @ 2025-11-30 16:28:06

    C :

    #include<stdio.h>
    #include<stdlib.h>
    int cmp(const void *a, const void*b)
    {
        return *(int *)a-*(int *)b;
    }
    void swap(int *x,int *y)
    {
        int t=*x;*x=*y;*y=t;
    }
    int main()
    {
        int n,i,j,s,ans=0,a[10005];
        scanf("%d",&n);
        for(i=0;i<n; i++)
            scanf("%d",&a[i]);
        qsort(a,n,sizeof(a[0]),cmp);
        for(i=1;i<n;i++)
        {
            a[i]=a[i]+a[i-1];
            ans+=a[i];
            j=i;
            while((a[j]>a[j+1])&&(j<n-1))
            {
                swap(&a[j],&a[j+1]);
                j++;
            }
        }
        printf("%d",ans);
        return 0;
    }
    
    

    C++ :

    #include <iostream>
    #include <algorithm>
    using namespace std;
    const int N(30009);
    int w[N]={0};
    void adjust(int i,int b)
    {
    	int j=i*2;
    	while(j<=b)
    	{
    		if(j<b&&w[j]>w[j+1])
    			j++;
    		if(w[i]>w[j])
    		{
    			swap(w[i],w[j]);
    			i=j;
    			j*=2;
    		}
    		else
    			break;
    	}
    }
    int main()
    {
    	int n,ans(0);
    	cin>>n;
    	for(int i=1;i<=n;i++)
    		cin>>w[i];
    	for(int i=n/2;i>=1;i--) adjust(i,n);
    	for(int i=n;i>1;i--)
    	{
    		adjust(1,i);
    		swap(w[1],w[i]);
    		adjust(1,i-1);
    		w[1]+=w[i];
    		ans+=w[1];
    	}
    	cout<<ans<<endl;
    	return 0;
    }
    

    Python :

    # coding=utf-8
    from queue import PriorityQueue
    
    q = PriorityQueue()
    n = int(input())
    a = list(map(int, input().split()))
    for i in range(len(a)):
        q.put(a[i], a[i])
    sum_num = 0
    while q.qsize() > 1:
        a = q.get()
        b = q.get()
        q.put(a + b)
        sum_num += a + b
    print(sum_num)
    
    • 1

    NOIP2004提高组第3题 合并果子   

    信息

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