zoukankan      html  css  js  c++  java
  • poj 2442

    多路归并+优先队列的使用

    #include <iostream>
    #include <cstdio>
    #include <queue>
    #include <algorithm>
    using namespace std;
    const int maxn=2000+10;
    int a[110][maxn],b[maxn],n,m;
    struct item
    {
        int s,b;
        item(int s,int b):s(s),b(b) { }
    };
    bool operator < (item a,item b)
    {
        return a.s>b.s;
    }
    void solve(int * t1,int *t2,int *t3)
    {
        priority_queue<item> q;
        int i;
        for(i=0;i<n;i++) q.push(item(t2[0]+t1[i],0));
        for(i=0;i<n;i++)
        {
            item tem=q.top();
            q.pop();
            t3[i]=tem.s;
            q.push(item(tem.s+t2[tem.b+1]-t2[tem.b],tem.b+1));
        }
    }
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            scanf("%d%d",&m,&n);
            int i,j;
            for(i=0;i<m;i++)
            {
                for(j=0;j<n;j++) scanf("%d",&a[i][j]);
                sort(a[i],a[i]+n);
            }
            for(i=1;i<m;i++)
                solve(a[0],a[i],a[0]);
            printf("%d",a[0][0]);
            for(i=1;i<n;i++) printf(" %d",a[0][i]);
            printf("\n");
        }
        return 0;
    }
    


  • 相关阅读:
    c++:函数模板
    1084 外观数列
    1083 是否存在相等的差
    1082 射击比赛
    1081 检查密码
    1080 MOOC期终成绩
    1079 延迟的回文数
    1078 字符串压缩与解压
    1077 互评成绩计算
    1076 Wifi密码
  • 原文地址:https://www.cnblogs.com/lj030/p/3065556.html
Copyright © 2011-2022 走看看