• 【pat】1015 德才论


    分析

    本题需要分为几个等级:
    1、德与才均超过优先录取线;
    2、德超过而才没有超过优先录取线;
    3、德与才均未超过优先录取线,但是德分高于才分;
    4、德与才均超过最低录取线但不符合前三种情况
    5、德与才均未超过最低录取线。
    考生按输入中说明的规则从高到低(按等级,等级相同按总分)排序,当某类考生中有多人总分相同时,按其德分降序排列;若德分也并列,则按准考证号的升序输出。

    1.sort多重条件排序
    2.超时问题:
    身份证id如果定义成string类型会超时,这里用char

    #include <iostream>
    #include<string.h>
    #include<algorithm>
    
    using namespace std;
    struct student { //创建结构体来存放准考证号、德、才、总分数
    	char id[9];
    	int d, c, sum; //德分、才分、总分
    	int l; //定义一个等级,用来判断排序的优先顺序
    } a[100001];
    bool cmp(student a, student b) { //按照题意来排序,优先顺序为:德分和才分均不低于优先录取线,才分不到但德分到线,德才分均低于优先录取线,但是德分大于才分
    	if (a.l != b.l)
    		return a.l < b.l;
    	else if (a.sum != b.sum)
    		return a.sum > b.sum;
    	else if (a.d != b.d)
    		return a.d > b.d;
    	else
    		return strcmp(a.id, b.id) < 0; //按照字母顺序从小到大
    }
    int main() {
    	int N, L, H;
    	int i;
    	int num;
    	cin >> N >> L >> H;
    	num = N;
    	for (i = 0; i < N; i++) {
    		cin >> a[i].id >> a[i].d >> a[i].c;
    		a[i].sum = a[i].d + a[i].c;
    		if (a[i].d < L || a[i].c < L) {
    			a[i].l = 5;
    			num--; //减去未及格的
    		} else if (a[i].d >= H && a[i].c >= H)
    			a[i].l = 1;
    		else if (a[i].d >= H && a[i].c < H)
    			a[i].l = 2;
    		else if (a[i].d >= a[i].c)
    			a[i].l = 3;
    		else
    			a[i].l = 4;
    	}
    	sort(a, a + N, cmp);
    	cout << num << endl;
    	for (i = 0; i < num; i++)
    		cout << a[i].id << " " << a[i].d << " " << a[i].c << endl;
    	return 0;
    }
    
    
  • 相关阅读:
    linux之sed用法【转载】
    关于Cookie和Session【转载】
    Oracle分页查询与RowNum
    fstream的用法
    Java:Date、Calendar、Timestamp的区别、相互转换与使用【转载】
    DatabaseMetaData的用法【转载】
    关于SQL的Group By
    【转载】B树、B-树、B+树、B*树都是什么
    Spring的MVC控制器返回ModelMap时,会跳转到什么页面?
    关于jsp中超链接的相对路径
  • 原文地址:https://www.cnblogs.com/tanghm/p/12863234.html
Copyright © 2020-2023  润新知