1015 德才论
/**
* 1.分析条件: 才+德 = 圣人 德 >= H ,才 >= H 德+才总分从高到低排序 一类考生
* 德 > 才 = 君子 德 >= H ,才 < H 德+才总分从高到低排序 二类考生
* 才 > 德 = 小人 德 < H ,才 < H ,德 >= 才 德+才总分从高到低排序 三类考生
* 其它 德+才总分从高到低排序 四类考生
*
* 2.比较规则:德+才总分从高到低排序。
* 总分相同时,按其德分降序排列
* 若德分也并列,则按准考证号的升序输出。
*
* 3.解题思路:创建考生结构体,采用vector<node> v[4]分别存放四类考生,
* 根据分析条件,创建四个if分支语句,并将不同的考生类型存放到v中,
* 创建比较函数,根据比较规则对考生进行排序,
* 打印符合条件的考生总数和各个考生的具体信息。
*
* 4.参考博客:https://www.liuchuo.net/archives/498
*
*/
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
//考生结构体
struct node {
int num, de, cai;
};
//比较规则
int cmp(struct node a, struct node b) {
if ((a.de + a.cai) != (b.de + b.cai))
return (a.de + a.cai) > (b.de + b.cai);
else if (a.de != b.de)
return a.de > b.de;
else
return a.num < b.num;
}
int main() {
int n, low, high;
scanf("%d %d %d", &n, &low, &high);
vector<node> v[4];
node temp;
int total = n;
//分析条件
for (int i = 0; i < n; i++) {
scanf("%d %d %d", &temp.num, &temp.de, &temp.cai);
if (temp.de < low || temp.cai < low)
total--;
else if (temp.de >= high && temp.cai >= high)
v[0].push_back(temp);
else if (temp.de >= high && temp.cai < high)
v[1].push_back(temp);
else if (temp.de < high && temp.cai < high && temp.de >= temp.cai)
v[2].push_back(temp);
else
v[3].push_back(temp);
}
//输出
printf("%d\n", total);
for (int i = 0; i < 4; i++) {
sort(v[i].begin(), v[i].end(), cmp);
for (int j = 0; j < v[i].size(); j++)
printf("%d %d %d\n", v[i][j].num, v[i][j].de, v[i][j].cai);
}
return 0;
}
版权声明:本文为weixin_38369593原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。