1012. The Best Rank (25)

目录

原题

1012. The Best Rank (25)

思路

依次按照平均分、C语言、数学、英语分数对学生进行排序。然后依次在按平均分、C语言、数学、英语排好顺序的数组中找到该学生排名,记录该学生的最好排名及其科目。

代码

#include <cstdio>
#include <cstdlib>
#include <climits>
#include <cstring>
#include <algorithm>

using namespace std;

struct student {
    char id[7];
    double c_lan, math, english, aveg;
};

bool cmpc(student s1, student s2);
bool cmpm(student s1, student s2);
bool cmpe(student s1, student s2);
bool cmpa(student s1, student s2);

int main(void) {
    setvbuf(stdin, new char[1 << 20], _IOFBF, 1 << 20);
    setvbuf(stdout, new char[1 << 20], _IOFBF, 1 << 20);

    int n, m;
    scanf("%d %d", &n, &m);
    student *arraya = new student[n], *arrayc = new student[n], *arraym = new student[n], *arraye = new student[n];
    student *array[4] = { arraya, arrayc, arraym, arraye };
    char **checklist = new char*[m];
    int i, j, k;
    for (i = 0; i < m; i++) {
        checklist[i] = new char[7];
    }
    bool(*temp[4])(student, student) = { cmpa, cmpc, cmpm, cmpe };
    bool(*cmp)(student, student);
    for (i = 0; i < n; i++) {
        scanf("%s %lf %lf %lf", arraya[i].id, &(arraya[i].c_lan), &(arraya[i].math), &(arraya[i].english));
        arraya[i].aveg = (arraya[i].c_lan + arraya[i].math + arraya[i].english) / 3;
        arrayc[i] = arraym[i] = arraye[i] = arraya[i];
    }
    for (i = 0; i < m; i++) {
        scanf("%s", checklist[i]);
    }

    for (i = 0; i < 4; i++) {
        sort(array[i], array[i] + n, temp[i]);
    }
    int rank, course;
    for (i = 0; i < m; i++) {
        rank = INT_MAX;
        for (j = 0; j < 4; j++) {
            for (k = 0; k < n; k++) {
                if (!strcmp(array[j][k].id, checklist[i])) {
                    switch (j) {
                    case 0: while (k > 0 && array[j][k - 1].aveg == array[j][k].aveg) { k--; } break;
                    case 1: while (k > 0 && array[j][k - 1].c_lan == array[j][k].c_lan) { k--; } break;
                    case 2: while (k > 0 && array[j][k - 1].math == array[j][k].math) { k--; } break;
                    case 3: while (k > 0 && array[j][k - 1].english == array[j][k].english) { k--; } break;
                    default:break;
                    }
                    if (k + 1 < rank) {
                        rank = k + 1;
                        course = j;
                    }
                    break;
                }
            }
        }
        if (rank == INT_MAX) {
            puts("N/A");
        }
        else {
            printf("%d ", rank);
            switch (course) {
            case 0: putchar('A'); break;
            case 1: putchar('C'); break;
            case 2: putchar('M'); break;
            case 3: putchar('E'); break;
            default: break;
            }
            putchar('\n');
        }
    }
    for (i = 0; i < 4; i++) {
        delete[] array[i];
    }
    for (i = 0; i < m; i++) {
        delete[] checklist[i];
    }
    delete[] checklist;
    return 0;
}

bool cmpc(student s1, student s2) {
    return s1.c_lan > s2.c_lan;
}
bool cmpm(student s1, student s2) {
    return s1.math > s2.math;
}
bool cmpe(student s1, student s2) {
    return s1.english > s2.english;
}
bool cmpa(student s1, student s2) {
    return s1.aveg > s2.aveg;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
罗兰E.best是一款德国知名音乐合成器品牌罗兰(Roland)旗下的电子乐器系列。这个系列的产品包括键盘、电子架鼓和节奏机等,适用于各类音乐创作、演出和录制工作。 罗兰E.best系列的特点是声音质量出众,功能强大且易于操作。它们提供了很多不同的音色选择,如钢琴、吉他、合唱、合成、电流音、人声等。这些音色都经过专业的采样和处理,通过键盘或其他控制面板上的按钮和旋钮可以进行调节和变换。不仅如此,罗兰E.best还内置了各种效果器,比如混响、合唱、压缩、失真等,可以为音乐添加更多的表现力和情感。 除了出色的声音质量,罗兰E.best还具有丰富的功能。它们可以模拟不同乐器的演奏技法和特色效果,使得演奏更加真实和逼真。例如,可以通过操控键盘上的压力灵敏点以实现鼓和钢琴的弹奏技巧;还可以使用魔术鼓垫来模拟打击鼓的效果。此外,罗兰E.best还可以实时录制、编辑和混音音乐,支持多音轨录制和复杂的音频处理。 罗兰E.best系列的产品广泛应用于各类音乐制作场景,如音乐制作工作室、现场演出、个人演奏、DJ表演等。无论是专业乐手还是业余爱好者,都可以通过罗兰E.best找到适合自己的乐器,发挥出无限的创造力和表现力。 总之,罗兰E.best系列是一款功能强大、音色出众的电子乐器系列,在音乐制作和演奏领域有着广泛的应用和认可,是音乐爱好者们的不二选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值