1 #include <iostream> // 引入输入输出流库 2 #include <queue> // 引入队列库 3 #include <algorithm> // 引入算法库 4 using namespace std; // 使用标准命名空间 5 6 struct node { // 定义一个结构体,表示节点 7 int a; // 节点的a属性 8 int b; // 节点的b属性 9 int num; // 节点的num属性 10 bool operator < (const node other) const { // 重载小于运算符,用于比较两个节点的大小 11 return num > other.num; // 返回num是否大于other的num 12 } 13 }; 14 15 priority_queue<node> pq; // 定义一个优先队列,元素类型为node 16 int A[50001], B[50001]; // 定义两个数组A和B,长度为50001 17 18 int main() { // 主函数 19 int n; // 定义一个整数n 20 node temp; // 定义一个临时节点temp 21 cin >> n; // 从输入流中读取一个整数n 22 for (int i = 0; i < n; i++) { // 循环n次 23 cin >> A[i]; // 从输入流中读取一个整数并存入数组A的第i个元素 24 } 25 for (int i = 0; i < n; i++) { // 循环n次 26 cin >> B[i]; // 从输入流中读取一个整数并存入数组B的第i个元素 27 } 28 sort(A, A + n); // 对数组A进行排序 29 sort(B, B + n); // 对数组B进行排序 30 for (int i = 0; i < n; i++) { // 循环n次 31 temp.a = i; // 将i赋值给temp的a属性 32 temp.b = 0; // 将0赋值给temp的b属性 33 temp.num = A[i] + B[0]; // 计算A[i]和B[0]的和并赋值给temp的num属性 34 pq.push(temp); // 将temp压入优先队列pq 35 } 36 for (int i = 0; i < n; i++) { // 循环n次 37 temp = pq.top(); // 取出优先队列pq的顶部元素并赋值给temp 38 pq.pop(); // 弹出优先队列pq的顶部元素 39 if (i != n - 1) { // 如果i不等于n-1 40 cout << temp.num << " "; // 输出temp的num属性和一个空格 41 } else { // 如果i等于n-1 42 cout << temp.num << endl; // 输出temp的num属性并换行 43 } 44 if (temp.b != n - 1) { // 如果temp的b属性不等于n-1 45 temp.b++; // 将temp的b属性加1 46 temp.num = A[temp.a] + B[temp.b]; // 重新计算A[temp.a]和B[temp.b]的和并赋值给temp的num属性 47 pq.push(temp); // 将temp压入优先队列pq 48 } 49 } 50 return 0; // 返回0,表示程序正常结束 51 }