题面

  背景

  输入

  

  输出

    

翻译(渣自翻)

  给定K个包含K个数字的表,要求将其能产生的\( k^{k} \)个值中最小的K个输出出来

题解

k路归并问题的经典问题

可以转化为二路归并问题求解

考虑A[],B[]两个有序数组

使用堆,记录一些二元组\( (x,y) \),x表示值,y表示对应的b的下标,因为我们是把b合并到a上,所以我们能够根据记录的下标推出后面的值

然后两两合并

所以就很简单

放代码

#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
struct asshole{
int w,t;
bool operator < (const asshole b) const{
return w>b.w;
}
};
priority_queue<asshole> q;
int kz[],kk[];
int n;
void merge(int *a,int *b,int *c){
while(!q.empty())
q.pop();
for(int i=;i<=n;i++)
q.push((asshole){a[i]+b[],});
for(int i=;i<=n;i++){
asshole in = q.top();
q.pop();
a[i]=in.w;
int pos=in.t;
if(pos+<=n)
q.push((asshole){in.w-b[pos]+b[pos+],pos+});
}
}
int main(){
while(scanf("%d",&n)==){
for(int i=;i<=n;i++)
scanf("%d",&kz[i]);
sort(kz+,kz+n+);
for(int j=;j<=n-;j++){
for(int i=;i<=n;i++)
scanf("%d",&kk[i]);
sort(kk+,kk+n+);
merge(kz,kk,kz);
}
for(int i=;i<=n-;i++)
printf("%d ",kz[i]);
printf("%d",kz[n]);
printf("\n");
}
}

题解——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路归并问题 问题先转换为2路的有序表归并 先让A[1~k]都和B[1]相加,然后加入堆中,取出堆顶(A[x]+B[y])之后,再放入A[x]+B[y+1] 代码 #include < ...

  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. Hive和sparksql中的dayofweek

    dayofweek在hive2.2.0开始支持 ,低版本的hive没有提供原生的dayofweek函数,有时需要用到的时候不甚方便.其实低版本的sparksql和hive中可用以下方式实现dayofw ...

  2. 【转】ETL讲解(很详细!!!)

    ETL是将业务系统的数据经过抽取.清洗转换之后加载到数据仓库的过程,目的是将企业中的分散.零乱.标准不统一的数据整合到一起,为企业的决策提供分析依据. ETL是BI项目重要的一个环节. 通常情况下,在 ...

  3. TCP客户端图片上传服务端保存本地示例

    //TCP客户端public class TCPClient { public static void main(String[] args)throws IOException { Socket s ...

  4. mybatis源码解析7---MappedStatement初始化过程

    上一篇我们了解到了MappedStatement类就是mapper.xml中的一个sql语句,而Configuration初始化的时候会加载所有的mapper接口类,而本篇再分析下是如何将mapper ...

  5. vc709时钟信号报单端信号错误的记录

    话说,为什么我又要跑去搞fpga玩了,不是应该招个有经验的开发人员么?大概是练度不够吧…… Xilinx这个板子阿,真鸡儿贵,我这还没啥基础,慢慢试吧: 看了乱七八糟各种文档先不提,我还是决定先控制L ...

  6. Linux基础命令---ifcfg

    ifcfg ifcfg是一个简单的脚本替换iconfig命令,它可以设置网络接口的ip地址. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedo ...

  7. linux centos 如何设置swap大小?

    linux centos 如何设置swap大小? swap的值都是安装系统的时候设置好的,一般设置为内存的两倍大小.使用过程中发现swap值过小只能添加.用free -m 命令查看当前swap大小 使 ...

  8. CSS 选择器权重计算规则

    其实,CSS有自己的优先级计算公式,而不仅仅是行间>内部>外部样式:ID>class>元素. 一.样式类型 1.行间 <h1 style="font-size: ...

  9. Compare AURO OtoSys IM100 with OtoSys IM600

    The main difference lies in Mercedes-Benz, VW, Audi software and adapters to work with. Software dif ...

  10. mysql安装登录

    接下来就开始安装mysql 下载地址:http://dev.mysql.com/downloads/mysql/  选择 dmg格式 下载完毕后,双击打开dmg文件,双击 “mysql-5.7.9-o ...