題目描述
description
有兩個長度為 n 的序列 a 和 b,在 a 和 b 中各任取乙個數可以得到 n^2 個和,求這n^2 個和中最小的 n個。
輸入描述
input description
第一行輸入乙個正整數n;第二行n個整數ai 且ai≤10^9;第三行n個整數bi,
且bi≤10^9
輸出描述
output description
輸出僅一行,包含 n 個整數,從小到大輸出這 n個最小的和,相鄰數字之間用
空格隔開。
樣例輸入
sample input
1 3 2 4 5
6 3 4 1 7
樣例輸出
sample output
2 3 4 4 5
資料範圍及提示
data size & hint
【資料規模】 對於 100%的資料,滿足 1≤n≤100000。 思路
先把兩個陣列從小到大排個序
先求出a陣列中每個數與b陣列中第乙個數的和,作為堆的初始值,建乙個小根堆,以num為優先順序,y其次
由於我們不確定是a中每個數加b中最小數比較小,還是b中每個數加a中最小數比較小
所以要讓堆動起來,插入的元素就是a中當時的元素與b中下乙個元素的和,每次彈出堆頂元素,重複n次即可
#include#include#include
using
namespace
std;
int n,a[100001],b[100001
];struct
node
};node k;
priority_queue
q;int
main()
int s=1
;
while(s<=n)
s++;
cout
<'';
}return0;
}
codevs 1245 最小的N個和
題目描述 description 有兩個長度為 n 的序列 a 和 b,在 a 和 b 中各任取乙個數可以得到 n 2 個和,求這n 2 個和中最小的 n個。輸入描述 input description 第一行輸入乙個正整數n 第二行n個整數ai 且ai 10 9 第三行n個整數bi,且bi 10 ...
codevs 1245 最小的N個和
題目描述 description 有兩個長度為 n 的序列 a 和 b,在 a 和 b 中各任取乙個數可以得到 n 2 個和,求這n 2 個和中最小的 n個。輸入描述 input description 第一行輸入乙個正整數n 第二行n個整數ai 且ai 10 9 第三行n個整數bi,且bi 10 ...
Wiki OI 1245 最小的N個和
演算法與思路 k路歸併 堆 優先佇列 k路歸併具體請參考劉汝佳 演算法競賽入門經典訓練指南 p189 題目要求從兩個長度為n的數列中各取出一數相加,可得到n n個和,輸出這些和公升序的前n項 由於資料太大,不能通過先求和再排序的方式來求解,這個時候就要用到堆了 首先將a,b兩陣列排序,然後將a i ...