top1编程
← 返回题目
题解

病人排队

1 条题解

  • 0
    @ 2026-7-28 22:45:05
    #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