[PAT Basic] 1015 德才论 (25 分)

思路

根据题意,首先创建对应结构体,分别定义四个vector,根据提交逐个push, 重点是sort比较函数的逻辑,然后对每个vector排序输出

cpp

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>

using namespace std;
int n, l, h, suc = 0;

typedef struct stu {
    int id;
    int quality;
    int knows;
}stu;

bool cmp(stu a, stu b) {
    bool result;
    int all_a = a.quality + a.knows;
    int all_b = b.quality + b.knows;

    if (all_a == all_b) {
        if (a.quality == b.quality) {
            if (a.id < b.id) {
                result = true;
            } else {
                result = false;
            }
        } else {
            if (a.quality > b.quality) {
                result = true;
            } else {
                result = false;
            }
        }
    } else {
        if (all_a > all_b) {
            result = true;
        } else {
            result = false;
        }
    }

    return result;
}

int main() {
    scanf("%d %d %d", &n, &l, &h);
    vector<stu> first;
    vector<stu> second;
    vector<stu> third;
    vector<stu> fourth;
    stu s;
    int tid, def, abc;
    for (int i = 0; i < n; i ++) {
        scanf("%d %d %d", &tid, &def, &abc);
        s.id = tid;
        s.quality = def;
        s.knows = abc;
        if (s.quality >= l && s.knows >= l) {
            suc ++;
            if (s.quality >= h && s.knows >= h) {
                first.push_back(s);
                continue;
            } else if (s.quality >= h && s.knows < h) {
                second.push_back(s);
                continue;
            } else if (s.quality >= s.knows) {
                third.push_back(s);
                continue;
            } else {
                fourth.push_back(s);
                continue;
            }
        }
    }
    sort(first.begin(), first.end(), cmp);
    sort(second.begin(), second.end(), cmp);
    sort(third.begin(), third.end(), cmp);
    sort(fourth.begin(), fourth.end(), cmp);
    printf("%d\n", suc);

    for (int i = 0; i < first.size(); i ++) {
        printf("%d %d %d\n", first[i].id, first[i].quality, first[i].knows);
    }
    for (int i = 0; i < second.size(); i ++) {
        printf("%d %d %d\n", second[i].id, second[i].quality, second[i].knows);
    }
    for (int i = 0; i < third.size(); i ++) {
        printf("%d %d %d\n", third[i].id, third[i].quality, third[i].knows);
    }
    for (int i = 0; i < fourth.size(); i ++) {
        printf("%d %d %d", fourth[i].id, fourth[i].quality, fourth[i].knows);
        if (i != fourth.size() - 1) {
            printf("\n");
        }
     }

    return 0;
}

原文地址:https://www.cnblogs.com/esrevinud/p/11954961.html

时间: 2024-10-29 19:07:51

[PAT Basic] 1015 德才论 (25 分)的相关文章

【PAT】1015 德才论 (25)(25 分)

1015 德才论 (25)(25 分) 宋代史学家司马光在<资治通鉴>中有一段著名的"德才论":"是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人." 现给出一批考生的德才分数,请根据司马光的理论给出录取排名. 输入格式: 输入第1行给出3个正整数,分别为:N(<=10^5^),即考生总数:L(>=60),为录取最低分数线,即德分和才分均不低于L的考生才有资格被

1015 德才论 (25分)

宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人.” 现给出一批考生的德才分数,请根据司马光的理论给出录取排名. 输入格式: 输入第一行给出 3 个正整数,分别为:N(≤),即考生总数:L(≥),为录取最低分数线,即德分和才分均不低于 L 的考生才有资格被考虑录取:H(<),为优先录取线——德分和才分均不低于此线的被定义为“才德全尽”,此类考生按德才

PAT:1015. 德才论 (25) AC

#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; struct Student { char mID[10]; int de,cai,sum; int tag; //标明是第几类:1德才都们组,2德胜才,3 }STU[100010]; bool cmp(Student a,Student b) //[warning]不能写STU { if(a.tag!=b.tag)

PAT Basic 1030 完美数列 (25 分)

给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列. 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列. 输入格式: 输入第一行给出两个正整数 N 和 p,其中 N(≤)是输入的正整数的个数,p(≤)是给定的参数.第二行给出 N 个正整数,每个数不超过 1. 输出格式: 在一行中输出最多可以选择多少个数可以用它们组成一个完美数列. 输入样例: 10 8 2 3 20 4 5 1 6 7 8 9 输出样例: 8

PAT Basic 1065 单身狗 (25 分)

“单身狗”是中文对于单身人士的一种爱称.本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱. 输入格式: 输入第一行给出一个正整数 N(≤ 50 000),是已知夫妻/伴侣的对数:随后 N 行,每行给出一对夫妻/伴侣——为方便起见,每人对应一个 ID 号,为 5 位数字(从 00000 到 99999),ID 间以空格分隔:之后给出一个正整数 M(≤ 10 000),为参加派对的总人数:随后一行给出这 M 位客人的 ID,以空格分隔.题目保证无人重婚或脚踩两条船. 输出格式: 首先第一

PAT Basic 1050 螺旋矩阵 (25 分)

本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N:m≥n:且 m−n 取所有可能值中的最小值. 输入格式: 输入在第 1 行中给出一个正整数 N,第 2 行给出 N 个待填充的正整数.所有数字不超过 1,相邻数字以空格分隔. 输出格式: 输出螺旋矩阵.每行 n 个数字,共 m 行.相邻数字以 1 个空格分隔,行末不得有多余空格. 输入样例: 12 3

PAT-乙级-1015. 德才论 (25)

1015. 德才论 (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Li 宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人.” 现给出一批考生的德才分数,请根据司马光的理论给出录取排名. 输入格式: 输入第1行给出3个正整数,分别为:N(<=105),即考生总数:

PAT Basic 1015

1015 德才论 宋代史学家司马光在<资治通鉴>中有一段著名的"德才论":"是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人." 现给出一批考生的德才分数,请根据司马光的理论给出录取排名. 输入格式: 输入第1行给出3个正整数,分别为:N(<=10^5^),即考生总数:L(>=60),为录取最低分数线,即德分和才分均不低于L的考生才有资格被考虑录取:H(<

PAT Basic 1057 数零壹 (20 分)

给定一串长度不超过 1 的字符串,本题要求你将其中所有英文字母的序号(字母 a-z 对应序号 1-26,不分大小写)相加,得到整数 N,然后再分析一下 N 的二进制表示中有多少 0.多少 1.例如给定字符串 PAT (Basic),其字母序号之和为:16+1+20+2+1+19+9+3=71,而 71 的二进制是 1000111,即有 3 个 0.4 个 1. 输入格式: 输入在一行中给出长度不超过 1.以回车结束的字符串. 输出格式: 在一行中先后输出 0 的个数和 1 的个数,其间以空格分隔