3555 Problem B 序列合併

2021-08-22 19:38:20 字數 1007 閱讀 7233

時間限制: 1 sec  記憶體限制: 128 mb

提交: 88  解決: 33

有兩個長度都為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個最小的和,相鄰數字之間用空格隔開。
3

2 6 6

1 4 8

3 6 7
建議用最小堆實現。

這題。。。還是要用堆實現,這個演算法。。。我是木有想到的= = 借鑑大神的**思想,思想描述如下

因為兩個陣列都是有序遞增,所以先建立堆結構(大端堆),將其中乙個陣列a的第乙個元素與另乙個陣列b的所有元素相加的結果依次放入,然後再從a的第二個元素開始,依次與b中所有元素相加,相加結果與堆中根結點比較,如果比堆的根結點小,刪除根結點,將此結果加入,如果比根結點大,那麼跳出此次迴圈,訪問a的下乙個元素。

此時堆為大端堆,用陣列將其倒置後輸出即可。 學到了~~( •́ .̫ •̀ )

#include #include using namespace std;

const int maxn=100010;

int a[maxn],b[maxn],ans[maxn],n;

priority_queueq;

int main()

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

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

for(int i=0;iprintf("\n");

} return 0;

}

3555 Problem B 序列合併

時間限制 1 sec 記憶體限制 128 mb 提交 315 解決 97 提交 狀態 討論版 命題人 外部匯入 有兩個長度都為n的序列a和b,在a和b中各取乙個數相加可以得到n2個和,求這n2個和中最小的n個。第一行乙個正整數n 1 n 100000 第二行n個整數ai,滿足ai ai 1且ai 1...

Problem B 輸出連續的整數序列 之二

實驗5 problem b 輸出連續的整數序列 之二 description 輸出若干個連續的整數序列。input 輸入有多行。第一行是n 0,表示後面有n行輸入。之後每行輸入包含2個資料p和q,兩者之間用空格隔開,且均在int型別的表示範圍內。output 輸出n個連續的整數序列,序列兩兩之間用乙...

12 1 3 2 組合序列表示式

12.1.3.2 組合序列表示式 在 c 中,yield return 關鍵字只能返回乙個元素,因此,如果我們要在 c 中,使用迭代器實現的方法中,產生整個序列,那麼,就必須使用 foreach 迴圈,遍歷序列中所有元素,逐個產生元素。這也能執行,但效率低下,特別是,如果用這種方式處理幾個巢狀的序列...