Zznu 1913: yifan and matrix (多路归并)
2024-08-28 02:50:47
题目链接:
题目描述:
有一个n*n的矩阵,在每一行取出一个数,可以得到n个数的和,问前n小的和分别是多少?
解题思路:
对于两个数组a[n],b[n],我们可以用二路归并维护一个升序序列a[i]+b[j](1<=i<=n,1<=j<=n),先把a[i]+b[1](1<=i<=n)加进优先队列,每次取出队首元素,记录下来,然后再改变为a[i]+b[j+1]再加进队列.
依次进行n-1二路合并即可。
优美的代码将要闪亮登场!!!!!
#include <queue>
#include <cstdio>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = ;
struct node
{
int sum, num;
node (int a, int b):sum(a),num(b){}
bool operator < (const node &a) const {
return sum > a.sum;
}
};
int maps[maxn][maxn], ans[maxn], arr[maxn];
int n;
void Merge (int cnt)
{
priority_queue <node> Q;
for (int i=; i<n; i++)
Q.push (node(ans[i]+maps[cnt][], ));
for (int i=; i<n; i++)
{
node p = Q.top ();
Q.pop();
arr[i] = p.sum;
if (p.num != n)
{
p.sum += maps[cnt][p.num+] - maps[cnt][p.num];
p.num ++;
Q.push (p);
}
}
for (int i=; i<n; i++)
ans[i] = arr[i];
}
int main ()
{
while (scanf ("%d", &n) != EOF)
{
for (int i=; i<n; i++)
{
for (int j=; j<n; j++)
scanf ("%d", &maps[i][j]);
sort (maps[i], maps[i]+n);
}
for (int i=; i<n; i++)
ans[i] = maps[][i];
for (int i=; i<n; i++)
Merge (i);
for (int i=; i<n; i++)
printf ("%d%c", ans[i], i==n-?'\n':' ');
}
return ;
}
最新文章
- iOS - 在工程中试玩状态模式
- XIV Open Cup named after E.V. Pankratiev. GP of SPb
- android selector 开始自定义样式
- [java基础]文档注释
- Linux安装mysql最新版本纪要
- Android Non-UI to UI Thread Communications(Part 2 of 5)
- online ddl 跟踪
- Android基本控件之Menus
- 使用VisualStudio进行单元测试之二
- 使Web Api 支持跨域资源共享(CORS)
- fp oo
- java复习(1)---java与C++区别
- django 项目中遇到的问题(持续更新中)
- 发送邮件,出现异常:服务器响应为: Error: need EHLO and AUTH first !";
- 在vue项目中mock数据
- vue-cil 服务端预渲染 prerender-spa-plugin
- shell编程学习笔记(十二):Shell中的break/continue跳出循环
- decorator, async/await, generator
- 删除新版UniAccess Agent 办公室监控软件的方法
- com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column &#39;id&#39; at row 1
热门文章
- 【网络】TCP的拥塞控制
- Java入门 第一季第五章 编程练习解析
- lightoj 1138 - Trailing Zeroes (III)【二分】
- Zookeeper 3.4 官方文档翻译
- maven导入dom4j以及jaxen.jar报java.lang.UnsupportedOperationException:错误
- tcp state
- 递归读取制定目录下所有文件夹和文件的实现(java)
- mongodb01--安装
- CentOS 7下Keepalived + HAProxy 搭建配置详解
- 利用http_load测试Web引擎性能