提交时间:2026-04-14 19:14:03

运行 ID: 436434

#include <iostream> #include <vector> using namespace std; // 定义学生结构体,存储成绩、用时、学号 struct Student { int grade; // 分数 int time; // 用时 int id; // 学号 }; int main() { int n, m; cin >> n >> m; // 输入小童和小织分别排序的人数 // 存储小童和小织排序后的结果 vector<Student> group1(n), group2(m); // 读取小童排序的n个学生数据 for (int i = 0; i < n; ++i) { cin >> group1[i].grade >> group1[i].time >> group1[i].id; } // 读取小织排序的m个学生数据 for (int i = 0; i < m; ++i) { cin >> group2[i].grade >> group2[i].time >> group2[i].id; } vector<Student> result; // 存储合并后的结果 int i = 0, j = 0; // 双指针,分别指向group1和group2的当前元素 // 双指针合并两个已排序的数组 while (i < n && j < m) { // 按照题目规则比较当前元素: // 1. 分数从大到小 // 2. 分数相等时,用时从小到大 // 3. 分数和用时都相等时,学号从小到大 if (group1[i].grade > group2[j].grade || (group1[i].grade == group2[j].grade && group1[i].time < group2[j].time) || (group1[i].grade == group2[j].grade && group1[i].time == group2[j].time && group1[i].id < group2[j].id)) { result.push_back(group1[i]); // 选择group1的当前元素 ++i; } else { result.push_back(group2[j]); // 选择group2的当前元素 ++j; } } // 将剩余的元素全部加入结果数组 while (i < n) { result.push_back(group1[i]); ++i; } while (j < m) { result.push_back(group2[j]); ++j; } // 输出合并后的排序结果 for (const auto& student : result) { cout << student.grade << " " << student.time << " " << student.id << endl; } return 0; }