题解
2024-07-29 15:14:17
发布于:浙江
13阅读
0回复
0点赞
优先队列,维护单调性,依次入队就ok了,直接O(n^2log n)的话,以acgo应该能过,但是可以先判断然后break就不会浪费了,上代码
#include <algorithm>
#include <bitset>
#include <cctype>
#include <cerrno>
#include <clocale>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <limits>
#include <list>
#include <map>
#include <iomanip>
#include <ios>
#include<iosfwd>
#include <iostream>
#include <istream>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <utility>
#include <vector>
#include <cwchar>
#include <cwctype>
using namespace std;
typedef long long ll;
int a[100010];
int b[100010];
int ans[100010];
int n;
priority_queue<int > q;
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]);
}
sort(a + 1, a + n + 1);
sort(b + 1, b + n + 1);
for (int i = 1; i <= n; i++) {
int x = a[1] + b[i];
q.push(x);
}
for (int i = 2; i <= n; i++) {
for (int j = 1; j <= n; j++) {
int x = a[i] + b[j];
if (x >= q.top()) {
break;
}
else {
q.pop();
q.push(x);
}
}
}
for (int i = n; i >= 1; i--) {
ans[i] = q.top();
q.pop();
}
for (int i = 1; i <= n; i++) {
printf("%d ", ans[i]);
}
return 0;
}
全部评论 1
头文件之神出现了!!!
2024-08-12 来自 浙江
0
有帮助,赞一个