n個最小和

2021-09-20 19:19:26 字數 807 閱讀 6913

給出兩個包含n 個整數的陣列 a,b。分別在 a, b 中任意出乙個數並且相加,可以得到 n^2個和。求這些和中最小的 n 個。

輸入格式:

輸入第一行乙個整數 n(1≤n≤50000)

接下來一行輸入陣列 a,用空格隔開。

接下來一行輸入陣列 b,用空格隔開。

1≤ai,bi≤10^9

輸出格式:

從小到大輸出最小的 n 個和,用空格隔開。

樣例輸入

41 3 5 7

2 4 6 8

樣例輸出

3 5 5 7

考察核心:

優先佇列的經典應用

過載優先佇列

解題思路:

首先我們把這兩個陣列a,b排序。

把入隊我們將優先佇列的優先順序依照結構體中的sum排序

將優先順序最大的出隊例如:

則下一次入隊就是

重複n次,即兩個集合中各選乙個數組成最小的n個和。

#include#include#includeusing namespace std;

struct n//優先佇列中自定義優先順序排序

};int main()

struct n tmp=v.top();//輸出第乙個不加空格的數

cout

tmp.sum=a[tmp.posa]+b[++tmp.posb];

v.push(tmp);

for(int i=2;i<=n;++i)

}

n個最小和

題目 問題描述 給出兩個包含 n 個整數的陣列 a,b。分別在 a,b 中任意出乙個數並且相加,可以得到 n 2個和。求這些和中最小的 n 個。輸入格式 輸入第一行乙個整數n 1 n 50000 接下來一行輸入陣列 a,用空格隔開。接下來一行輸入陣列 b,用空格隔開。1 ai 10 9.輸出格式 從...

Wiki OI 1245 最小的N個和

演算法與思路 k路歸併 堆 優先佇列 k路歸併具體請參考劉汝佳 演算法競賽入門經典訓練指南 p189 題目要求從兩個長度為n的數列中各取出一數相加,可得到n n個和,輸出這些和公升序的前n項 由於資料太大,不能通過先求和再排序的方式來求解,這個時候就要用到堆了 首先將a,b兩陣列排序,然後將a i ...

codevs1245 最小的N個和

題目描述 description 有兩個長度為 n 的序列 a 和 b,在 a 和 b 中各任取乙個數可以得到 n 2 個和,求這n 2 個和中最小的 n個。輸入描述 input description 第一行輸入乙個正整數n 第二行n個整數ai 且ai 10 9 第三行n個整數bi,且bi 10 ...