有兩個長度都是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:
複製
32 6 6
1 4 8
輸出樣例#1:
複製
3 6 7
自己用二重迴圈寫的一直超時,看了看大佬的思想才優化了一下:
#includeusing namespace std;
const int maxn=100002;
priority_queue>h;//大根堆
int n,a[maxn],b[maxn],c[maxn];
int main()
return 0;
}
P1631 序列合併
做法 將 a 和 b 都從小到大排一遍序。然後組成這樣乙個矩陣 a1 b1 a1 b2 a1 b3 a1 bn a2 b1 a2 b2 a2 b3 a2 bn a3 b1 an b1 an b2 an b3 an bn 正確性 我們先把每行的頭扔進堆裡,每行的頭是每行中的最小值,所以這樣我們能在堆裡...
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 10 9 第三行n個整數 b ibi 滿足 b i ...
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.資料規模 對於50 的資料中,滿足1 n 1000 ...