【PAT甲级】1062. Talent and Virtue (25)

本文介绍了一个基于不同标准对候选人进行分类和排序的系统。该系统根据候选人的才德总分、德行分数等条件将其分为四个等级,并采用特定的比较函数对候选人进行排序。最终输出的是满足最低分数线要求的候选人名单。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注:两成绩均小于h的人群中,virtue>=talent的fool men,排名在virtue < talent的人群之前

#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
typedef struct Peo {
    int id;
    int talent;
    int virtue;
    int total;
    int level;
} Peo;
vector<Peo> v;
int n, l, h;
bool cmp(Peo a, Peo b);

int main(int argc, char *argv[]) {
    int n, l, h;
    scanf("%d %d %d", &n, &l, &h);
    int i;
    for (i = 0; i < n; i++) {
        Peo p;
        scanf("%d %d %d", &p.id, &p.virtue, &p.talent);
        p.total = p.talent + p.virtue;
        if (p.talent >= h && p.virtue >= h) p.level = 1;
        else if (p.talent < h && p.virtue >= h) p.level = 2;
        else if (p.talent < h && p.virtue < h && p.talent <= p.virtue) p.level = 3;
        else p.level = 4;
        if (p.talent >= l && p.virtue >= l) {
            v.push_back(p);
        }
    }
    sort(v.begin(), v.end(), cmp);
    printf("%d\n", int(v.size()));
    for (i = 0; i < v.size(); i++) {
        printf("%08d %d %d\n", v[i].id, v[i].virtue, v[i].talent);
    }
    return 0;
}
bool cmp(Peo a, Peo b) {
    if (a.level < b.level) return true;
    else if (a.level == b.level && a.total > b.total) return true;
    else if (a.level == b.level && a.total == b.total && a.virtue > b.virtue) return true;
    else if (a.level == b.level && a.total == b.total && a.virtue == b.virtue && a.id < b.id) return true;
    return false;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值