洛谷 P1631 序列合併

2021-07-24 04:55:33 字數 997 閱讀 7378

題目描述

有兩個長度都是n的序列a和b,在a和b中各取乙個數相加可以得到n^2個和,求這n^2個和中最小的n個。

輸入輸出格式

輸入格式:

第一行乙個正整數n;

第二行n個整數ai,滿足ai<=ai+1且ai<=10^9;

第三行n個整數bi, 滿足bi<=bi+1且bi<=10^9.

【資料規模】

對於50%的資料中,滿足1<=n<=1000;

對於100%的資料中,滿足1<=n<=100000。

輸出格式:

輸出僅一行,包含n個整數,從小到大輸出這n個最小的和,相鄰數字之間用空格隔開。

輸入輸出樣例

輸入樣例#1:

3 2 6 6

1 4 8

輸出樣例#1:

3 6 7

堆的練習題,我記得汝佳的書上有個做法但是我忘了於是自己腦洞了個。。首先我們把每一對a[i]+b[i]丟進堆裡,然後記個標號。對於每次取堆頂,我們把a[i]+b[i+1]和a[i+1]+b[i]壓入堆裡。然後繼續取堆頂。。但是需要判斷重複數字,簡單的方法是開個set記錄一下。(寫法上可以用stl來個小優化,還有個神奇的性質自己挖掘)

#include

#include

#define n 100005

using

namespace

std;

int a[n],b[n],k[n];

int i,n;

priority_queueint,int>,vector

int,int> >,greaterint,int> > >q;

int main()

while(n--)

return

0;}

洛谷 P1631 序列合併

有兩個長度都是n的序列a和b,在a和b中各取乙個數相加可以得到n 2個和,求這n 2個和中最小的n個。第一行乙個正整數n 第二行n個整數ai,滿足ai ai 1且ai 10 9 第三行n個整數bi,滿足bi bi 1且bi 10 9.輸出僅一行,包含n個整數,從小到大輸出這n個最小的和,相鄰數字之間...

洛谷P1631 序列合併

序列合併 問題描述 有兩個長度都是n的序列a和b,在a和b中各取乙個數相加可以得到n 2個和,求這n 2個和中最小的n個 n 100000 分析 a i 與b j 相加後,下面相加的一定是a i 1 b j 或a i b j 1 一開始我們把b 1 與a中所有元素相加放入乙個小根堆裡,輸出min,然...

洛谷p1631 序列合併

有兩個長度都是n的序列a和b,在a和b中各取乙個數相加可以得到 n 2n2 個和,求這 n 2n2 個和中最小的n個。輸入格式 第一行乙個正整數n 第二行n個整數 a iai 滿足 a i le a ai ai 1 且 a i le 10 9ai 109 第三行n個整數 b ibi 滿足 b i l...