1 条题解

  • 0
    @ 2025-10-8 16:55:55
    #include<bits/stdc++.h>
    using namespace std;
    const int N=2100;
    int a[N],b[N],c[N],n,m;
    typedef pair<int ,int > PII;
     
    void merge()
    {
        priority_queue <PII,vector<PII>,greater<PII>> q;
        for(int i=1;i<=n;i++) q.push({a[1]+b[i],1});
        for(int i=1;i<=n;i++)
        {
            auto t=q.top(); q.pop();
            int s=t.first,p=t.second;
            c[i]=s;
            q.push({s-a[p]+a[p+1],p+1}); 
        }
        for(int i=1;i<=n;i++)a[i]=c[i];
    }
    int main()
    {
        int T;scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&m,&n); 
            for(int i=1;i<=n;i++)scanf("%d",&a[i]);
            sort(a+1,a+n+1);
            for(int i=2;i<=m;i++)
            {
                for(int j=1;j<=n;j++)scanf("%d",&b[j]);
                merge();
            }
            for(int i=1;i<=n;i++)printf("%d ",a[i]);
            printf("\n");
        }
        return 0;
    }
    • 1

    *【堆:多路归并】序列[POJ2442](好题)

    信息

    ID
    1285
    时间
    2000ms
    内存
    64MiB
    难度
    6
    标签
    递交数
    110
    已通过
    38
    上传者