codevs1245 最小的N個和

2021-07-30 12:56:09 字數 1015 閱讀 3874

題目描述 

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 ...