new file: P1631.cpp
This commit is contained in:
1 parent
ceaa8e6583
commit
d54592c27a
2 files changed
+65
No files matched your search
@@ -0,0 +1,26 @@
|
|||||||
|
#include <bits/stdc++.h>
|
||||||
|
using namespace std;
|
||||||
|
int n;
|
||||||
|
int a[100005], b[100005];
|
||||||
|
int main() {
|
||||||
|
scanf("%d", &n);
|
||||||
|
for (int i = 1; i <= n; ++i) {
|
||||||
|
scanf("%d", &a[i]);
|
||||||
|
}
|
||||||
|
for (int i = 1; i <= n; ++i) {
|
||||||
|
scanf("%d", &b[i]);
|
||||||
|
}
|
||||||
|
priority_queue<pair<int, pair<int, int>>, vector<pair<int, pair<int, int>>>,
|
||||||
|
greater<pair<int, pair<int, int>>>>
|
||||||
|
q;
|
||||||
|
for (int i = 1; i <= n; ++i)
|
||||||
|
q.push({a[i] + b[1], {i, 1}});
|
||||||
|
for (int i = 1; i <= n; ++i) {
|
||||||
|
printf("%d ", q.top().first);
|
||||||
|
auto t = q.top();
|
||||||
|
q.pop();
|
||||||
|
q.push({a[t.second.first] + b[t.second.second + 1],
|
||||||
|
{t.second.first, t.second.second + 1}});
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
# P1631 序列合并
|
||||||
|
|
||||||
|
## 题目描述
|
||||||
|
|
||||||
|
有两个长度为 $N$ 的**单调不降**序列 $A,B$,在 $A,B$ 中各取一个数相加可以得到 $N^2$ 个和,求这 $N^2$ 个和中最小的 $N$ 个。
|
||||||
|
|
||||||
|
## 输入格式
|
||||||
|
|
||||||
|
第一行一个正整数 $N$;
|
||||||
|
|
||||||
|
第二行 $N$ 个整数 $A_{1\dots N}$。
|
||||||
|
|
||||||
|
第三行 $N$ 个整数 $B_{1\dots N}$。
|
||||||
|
|
||||||
|
## 输出格式
|
||||||
|
|
||||||
|
一行 $N$ 个整数,从小到大表示这 $N$ 个最小的和。
|
||||||
|
|
||||||
|
## 输入输出样例 #1
|
||||||
|
|
||||||
|
### 输入 #1
|
||||||
|
|
||||||
|
```
|
||||||
|
3
|
||||||
|
2 6 6
|
||||||
|
1 4 8
|
||||||
|
```
|
||||||
|
|
||||||
|
### 输出 #1
|
||||||
|
|
||||||
|
```
|
||||||
|
3 6 7
|
||||||
|
```
|
||||||
|
|
||||||
|
## 说明/提示
|
||||||
|
|
||||||
|
对于 $50\%$ 的数据,$N \le 10^3$。
|
||||||
|
|
||||||
|
对于 $100\%$ 的数据,$1 \le N \le 10^5$,$1 \le A_i,B_i \le 10^9$。
|
||||||
Reference in new issue
Block a user