Codeup 616 問題 B 序列合併

2021-10-20 21:33:02 字數 961 閱讀 5505

有兩個長度都為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個整數中的最大值,並將此值從陣列中去除,將剩下的數進行排序。第二行將排序...