題目描述
有兩個長度都是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
思路是先把第二組的第乙個數和第一組所有數相加,建立乙個大根堆,再把第二組第二個數與第一組所有數相加,如果小於堆頂就把堆頂換了,維護堆,如果大則第二組第三個數,以此類推,直到第二組第n個數與第一組第乙個數相加小於堆頂,則輸出堆。
#include
using
namespace
std;
const
int maxn=100005;
bool flag;
int n,a[maxn],b[maxn],f[maxn],cnt,k=1,ff[maxn];
void pus(int x)
}void del()
}int main()
if(b[k]+a[i]>=f[1]) break;
f[1]=b[k]+a[i];
del();}}
sort(f+1,f+1+n);
for(int i=1;i<=n;i++)
printf("%d ",f[i]);
return
0;}
還有一種簡單寫法,思路一樣
#include
int a[100010],b[100010],num[100010],n;
int main()
}printf("%d ",rmin);
}return
0;}
洛谷1631 序列合併
題目描述 有兩個長度都是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 的資料中,滿...
洛谷 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 的資料中,滿...
洛谷 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個最小的和,相鄰數字之間...