有兩個長度都為n的序列a和b,在a和b中各取乙個數相加可以得到n2個和,求這n2個和中最小的n個。
第一行乙個正整數n(1 <= n <= 100000)。
第二行n個整數ai,滿足ai <= ai+1且ai <= 109
第三行n個整數bi,滿足bi <= bi+1且bi <= 109
輸出僅有一行,包含n個整數,從小到大輸出這n個最小的和,相鄰數字之間用空格隔開。
326
6148
3
67
思路:可以用堆實現,也可以用優先佇列實現,不過說到底實現的原理還是堆,因為優先佇列的本質就是堆。
該題中最主要的就是利用了堆中的乙個性質,堆頂元素最小或最大,此處使用小堆,即結點的值大於它的子節點。我們先把a中最小的數和b中所有的數加一遍,然後得到陣列heap[n],此時再構建出乙個小堆,然後把剩下的數相加後和堆頂作比較即可。
#include
#include
using
namespace std;
int heap[
100010
], n;
void
downadjust
(int low,
int high)
else}}
void
createheap()
intmain()
else}}
sort
(heap+
1, heap+
1+n)
;//可以再寫乙個堆排序演算法也可以直接sort
for(
int i=
0; i)printf
("%s%d"
, i==0?
"":" ", heap[i+1]
);return0;
}
Codeup 問題 B 採藥
辰辰是個天資聰穎的孩子,他的夢想是成為世界上最偉大的醫師。為此,他想拜附近最有威望的醫師為師。醫師為了判斷他的資質,給他出了乙個難題。醫 師把他帶到乙個到處都是草藥的山洞裡對他說 孩子,這個山洞裡有一些不同的草藥,採每一株都需要一些時間,每一株也有它自身的價值。我會給你一段時間,在這段時間裡,你可以...
codeup 問題 B 數制轉換
題目描述 求任意兩個不同進製非負整數的轉換 2進製 16進製制 所給整數在long所能表達的範圍之內。不同進製的表示符號為 0,1,9,a,b,f 或者 0,1,9,a,b,f 輸入 輸入只有一行,包含三個整數a,n,b。a表示其後的n 是a進製整數,b表示欲將a進製整數n轉換成b進製整數。a,b是...
codeup 問題 B 特殊排序
題目描述 輸入一系列整數,將其中最大的數挑出,並將剩下的數進行排序。輸入 輸入第一行包括1個整數n,1 n 1000,代表輸入資料的個數。接下來的一行有n個整數。輸出 可能有多組測試資料,對於每組資料,第一行輸出乙個整數,代表n個整數中的最大值,並將此值從陣列中去除,將剩下的數進行排序。第二行將排序...