题解
病人排队
1 条题解
-
0
#include <bits/stdc++.h> using namespace std; struct s{ int x; // 记录病人的登记顺序(用于相同条件下排序) int yy;// 病人年龄 string id; // 病人ID }a[50005]; bool cmp(s x,s y){ // 情况1:两者都是非老年人(年龄<60),或年龄相同 → 按登记顺序(x值)从小到大排序 if((x.yy<60 && y.yy<60) || x.yy==y.yy){ return x.x < y.x; }else{ // 情况2:其他情况(含老年人与非老年人对比、老年人年龄不同)→ 按年龄从大到小排序 // (保证老年人优先,且老年人内部按年龄降序) return x.yy > y.yy; } } int main(){ int n; cin>>n; // 输入病人数量 // 读取每个病人的信息,并记录登记顺序(i即登记顺序) for(int i=1;i<=n;i++){ cin>>a[i].id>>a[i].yy; // 输入ID和年龄 a[i].x = i; // 登记顺序为输入顺序(i从1开始) } // 按自定义规则排序(从下标1到n的病人) sort(a+1,a+n+1,cmp); // 输出排序后的病人ID for(int i=1;i<=n;i++){ cout<<a[i].id<<endl; } return 0; }
- 1