思路

经典的k路归并问题

问题先转换为2路的有序表归并

先让A[1~k]都和B[1]相加,然后加入堆中,取出堆顶(A[x]+B[y])之后,再放入A[x]+B[y+1]

代码

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
struct QNode{
int val,s;
bool operator < (const QNode &b) const{
return val>b.val;
}
};
priority_queue<QNode> q;
void merge(int *a,int *b,int *c,int n){//合并A和B两个有序表
while(!q.empty())
q.pop();
for(int i=1;i<=n;i++)
q.push((QNode){a[i]+b[1],1});
for(int i=1;i<=n;i++){
QNode x=q.top();
while(x.s>n){
q.pop();
x=q.top();
}
q.pop();
c[i]=x.val;
q.push((QNode){x.val-b[x.s]+b[x.s+1],x.s+1});
}
}
int A[2][800],k;
int main(){
freopen("test.in","r",stdin);
freopen("test.out","w",stdout);
while(scanf("%d",&k)==1){
for(int i=1;i<=k;i++)
scanf("%d",&A[0][i]);
sort(A[0]+1,A[0]+k+1);
for(int i=1;i<=k-1;i++){
for(int j=1;j<=k;j++)
scanf("%d",&A[1][j]);
sort(A[1]+1,A[1]+k+1);
merge(A[0],A[1],A[0],k);
}
for(int i=1;i<=k;i++)
printf("%d%c",A[0][i],(i==k)?'\n':' ');
}
return 0;
}

UVA11997 K Smallest Sums的更多相关文章

  1. 【暑假】[实用数据结构]UVa11997 K Smallest Sums

    UVa11997 K Smallest Sums  题目: K Smallest Sums You're given k arrays, each array has k integers. Ther ...

  2. UVA-11997 K Smallest Sums

    UVA - 11997 K Smallest Sums Time Limit: 1000MS   Memory Limit: Unknown   64bit IO Format: %lld & ...

  3. uva11997 K Smallest Sums&&UVALive 3135 Argus(优先队列,多路归并)

    #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #inc ...

  4. 题解——UVA11997 K Smallest Sums

    题面 背景 输入 输出 翻译(渣自翻) 给定K个包含K个数字的表,要求将其能产生的\( k^{k} \)个值中最小的K个输出出来 题解 k路归并问题的经典问题 可以转化为二路归并问题求解 考虑A[], ...

  5. D - K Smallest Sums(多路归并+贪心)

    Problem K K Smallest Sums You're given k arrays, each array has k integers. There are kk ways to pic ...

  6. 11997 - K Smallest Sums(优先队列)

    11997 - K Smallest Sums You’re given k arrays, each array has k integers. There are kk ways to pick ...

  7. UVa 11997 K Smallest Sums 优先队列&amp;&amp;打有序表&amp;&amp;归并

    UVA - 11997 id=18702" target="_blank" style="color:blue; text-decoration:none&qu ...

  8. 【优先队列】【UVa11997】K Smallest Sums

    传送门 Description Input Output Translation · 给定k个长度为k的数组,把每个数组选一个元素加起来,这样共有kk种可能的答案,求最小的k个 Sample Inpu ...

  9. K Smallest Sums

    uva11997:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_prob ...

随机推荐

  1. 网页分帧操作<frameset>,<iframe>标签

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  2. js jq 手机号实现(344) 附带删除功能 jq 实现银行卡没四个数加一个空格 附带删除功能

    js 手机号实现(344)  下面有将正则验证去掉“-” 或“空格”  下一篇博客有单独的删除功能方法 <!DOCTYPE html> <head> <meta char ...

  3. DWZ富客户端框架+DWZ简介及其使用+DWZ讨论组

    DWZ富客户端框架+DWZ简介及其使用+DWZ讨论组 地址: DWZ富客户端框架:http://jui.org/#_blank DWZ简介及其使用:http://blog.sina.com.cn/s/ ...

  4. vb中的sortedList和java中的

    vb中sortedList集合了数组和散列表的特征,可以像数组,ArrayList等索引获取值,也可以像hashtable,hashmap等散列表通过键值对获取值

  5. 线段树 || BZOJ1756: Vijos1083 小白逛公园 || P4513 小白逛公园

    题面:小白逛公园 题解: 对于线段树的每个节点除了普通线段树该维护的东西以外,额外维护lsum(与左端点相连的最大连续区间和).rsum(同理)和sum……就行了 代码: #include<cs ...

  6. 范进中Nature——儒林外史新义

    范进中Nature——儒林外史新义 范进发了文章回办公室,实验室一块儿搬砖的挂名作者俱各欢喜.正待烧锅煮方便面,只见他老板胡副教授,手里拿着一包外卖和一瓶红星二锅头,走了进来.范进向他作揖,坐下.胡副 ...

  7. Ubuntu系统启动后停在(initramfs)

    问题 今天我在启动虚拟机过程 遇到莫名其妙的问题,启动不了.如下图.提示某个文件系统错误了.例如我的就是 /dev/mapper/vagrant--vg-root . 上面问题 可把我急坏了,以为虚拟 ...

  8. odoo配置文件内容详解

    odoo常用openerp-server.conf配置参数详解 参数 说明 用法 addons_path addons模块的查找路径,多个路径用逗号分隔 addons_path = E:\GreenO ...

  9. rebuild online时意外中断 再次重建时报错解决方法

    rebuild online时意外中断 再次重建时报错 SQL> alter index PARTY.IDX_CM_INDIV_CUSTOMER_4 rebuild online; alter ...

  10. 类的继承和C3算法

    在Python的新式类中,方法解析顺序并非是广度优先的算法,而是采用C3算法,只是在某些情况下,C3算法的结果恰巧符合广度优先算法的结果. 可以通过代码来验证下: class NewStyleClas ...