zoukankan      html  css  js  c++  java
  • POJ 2442 Sequence

    P1631 序列合并(M=2)时的简化问题,回到本题,我们可以先求出前(2)序列中任取一个数相加构成的前(N)小和,把这(N)个和作为一个序列,再与第(3)个序列求新的前(N)小和,以此类推,最终得到(M)个序列任取一个数相加构成的前(N)小和。整个算法的时间复杂度为(O(MNlogN))

    注意点

    原序列不一定有序,需要先排序。

    const int N=2010;
    struct Node
    {
        int i,j;
        int sum;
        bool operator<(const Node &W) const
        {
            return sum > W.sum;
        }
    };
    int a[N],b[N],c[N];
    int n,m;
    
    void solve()
    {
        priority_queue<Node> heap;
        for(int i=0;i<n;i++) heap.push({i,0,a[i]+b[0]});
    
        for(int i=0;i<n;i++)
        {
            Node t=heap.top();
            heap.pop();
    
            c[i]=t.sum;
            heap.push({t.i,t.j+1,a[t.i]+b[t.j+1]});
        }
    
        for(int i=0;i<n;i++) a[i]=c[i];
    }
    
    int main()
    {
        int T;
        cin>>T;
        while(T--)
        {
            cin>>m>>n;
    
            for(int i=0;i<n;i++) cin>>a[i];
    
            sort(a,a+n);
    
            for(int i=0;i<m-1;i++)
            {
                for(int j=0;j<n;j++) cin>>b[j];
                sort(b,b+n);
    
                solve();
            }
            
            for(int i=0;i<n;i++) cout<<a[i]<<' ';
            cout<<endl;
        }
        //system("pause");
        return 0;
    }
    
  • 相关阅读:
    Day3-B-Round Marriage CodeForces-981F
    Day3-A-Problem H. Monster Hunter HDU6326
    Day3-G
    Day3-I-Squares POJ2002
    Day3-M-Cable master POJ1064
    Day3-N
    Day3-O-Median POJ3579
    Day3-P
    Day3-L-Cup HDU2289
    LeetCode "Majority Element"
  • 原文地址:https://www.cnblogs.com/fxh0707/p/14454167.html
Copyright © 2011-2022 走看看