1015 德才论
Statement
Metadata
- 作者: CHEN, Li
- 单位: 浙江大学
- 代码长度限制: 16 KB
- 时间限制: 400 ms
- 内存限制: 64 MB
宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。”
现给出一批考生的德才分数,请根据司马光的理论给出录取排名。
输入格式
输入第一行给出 3 个正整数,分别为:
随后 准考证号 德分 才分
,其中准考证号
为 8 位整数,德才分为区间 [0, 100] 内的整数。数字间以空格分隔。
输出格式
输出第一行首先给出达到最低分数线的考生人数
输入样例
14 60 80
10000001 64 90
10000002 90 60
10000011 85 80
10000003 85 80
10000004 80 85
10000005 82 77
10000006 83 76
10000007 90 78
10000008 75 79
10000009 59 90
10000010 88 45
10000012 80 100
10000013 90 99
10000014 66 60
输出样例
12
10000013 90 99
10000012 80 100
10000003 85 80
10000011 85 80
10000004 80 85
10000007 90 78
10000006 83 76
10000005 82 77
10000002 90 60
10000014 66 60
10000008 75 79
10000001 64 90
Solution
#include <bits/stdc++.h>
using namespace std;
#define MAXN 100000
struct pp {
int num;
int a, b, total, level;
} q[MAXN];
int comp(pp x, pp y) {
if (x.level < y.level)
return 1;
else if (x.level == y.level) {
if (x.total > y.total)
return 1;
else if (x.total == y.total) {
if (x.a > y.a)
return 1;
else if (x.a == y.a) {
if (x.num < y.num)
return 1;
}
}
}
return 0;
}
int main() {
int n, L, H, a, b, i, j, total, num;
cin >> n >> L >> H;
for (i = 0, j = 0; i < n; i++) {
scanf("%d%d%d", &num, &a, &b);
// cout<<a<<" "<<b<<endl;
if (a >= L && b >= L) {
q[j].num = num, q[j].a = a, q[j].b = b, q[j].total = q[j].a + q[j].b;
if (a >= H && b >= H)
q[j].level = 1;
else if (a >= H && b < H)
q[j].level = 2;
else if (a >= b && a < H && b < H)
q[j].level = 3;
else
q[j].level = 4;
// cout<<q[j].level<<endl;
j++;
}
}
total = j;
sort(q, q + total, comp);
printf("%d\n", total);
for (i = 0; i < total; i++) {
printf("%d %d %d\n", q[i].num, q[i].a, q[i].b);
// cout<<q[i].level<<" "<<q[i].total<<endl;
}
}
Last update: May 4, 2022