2 条题解
-
0
原始题解:
#include <bits/stdc++.h> using namespace std; struct stu { int xh; int year; string id; } a[50005]; bool cmp(stu x, stu y) { if (x.year < 60 && y.year < 60 || x.year == y.year) { return x.xh < y.xh; } else { return x.year > y.year; } } int main() { int n; cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i].id >> a[i].year; a[i].xh = i; } sort(a + 1, a + n + 1, cmp); for (int i = 1; i <= n; i++) { cout << a[i].id << endl; } return 0; } -
0
基数排序方法:
#include <bits/stdc++.h> using namespace std; // 定义病人结构体 struct Patient { string id; int age; }; // 基数排序的函数,降序排列 void countingSort(vector<Patient>& patients, int maxVal) { vector<int> count(maxVal + 1, 0); // 计数数组 vector<Patient> output(patients.size()); // 统计每个年龄出现的次数 for (auto& p : patients) { count[p.age]++; } // 计算每个年龄的实际位置 for (int i = maxVal - 1; i >= 0; i--) { count[i] += count[i + 1]; } // 按降序排列,将病人按年龄放到正确位置 for (int i = patients.size() - 1; i >= 0; i--) { output[count[patients[i].age] - 1] = patients[i]; count[patients[i].age]--; } // 将排序后的病人数组拷贝回原数组 patients = output; } int main() { int n; cin >> n; vector<Patient> patients; vector<Patient> oldPatients, youngPatients; // 输入病人的信息 for (int i = 0; i < n; i++) { Patient p; cin >> p.id >> p.age; if (p.age >= 60) { oldPatients.push_back(p); // 将老年人添加到老年人队列 } else { youngPatients.push_back(p); // 非老年人 } } // 对老年人按年龄降序排序 if (!oldPatients.empty()) { int maxAge = 100; // 最大年龄 countingSort(oldPatients, maxAge); } // 输出排序结果 for (auto& p : oldPatients) { cout << p.id << endl; // 输出老年人 } for (auto& p : youngPatients) { cout << p.id << endl; // 输出非老年人 } return 0; }
- 1
信息
- ID
- 663
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 7
- 已通过
- 3
- 上传者