2 条题解

  • 0
    @ 2025-2-12 16:20:44

    原始题解:

    #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
      @ 2025-2-12 16:18:44

      基数排序方法:

      #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
      上传者