1 条题解

  • 0
    @ 2025-4-7 21:19:29

    C :

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

    C++ :

    #pragma warning(disable: 4786)
    #include<cstdio>
    #include<set>
    #include<vector>
    using namespace std;
    vector<int>a,b;
    multiset<int>s;
    multiset<int>::iterator it;
    int main()  
    {  
    	int i,j,n,m;
    	scanf("%d",&n);
    	a.resize(n),b.resize(n);
    	for(i=0;i<n;i++)
    		scanf("%d",&a[i]);
    	for(i=0;i<n;i++)
    		scanf("%d",&b[i]);
    	for(i=0;i<n;i++)
    		s.insert(a[0]+b[i]);
    	for(i=1;i<n;i++)
    	{
    		it=s.end();
    		it--;
    		m=*it;
    		for(j=0;j<n;j++)
    		{
    			if(a[i]+b[j]>=m)
    				break;
    			s.erase(it);
    			s.insert(a[i]+b[j]);
    			it=s.end();
    			it--;
    		    m=*it;
    		}
    	}
    	for(it=s.begin();it!=s.end();it++)
    	{
    		if(it!=s.begin())
    			printf(" ");
    		printf("%d",*it);
    	}
        return 0;  
    }  
    
    • 1

    信息

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