zoukankan      html  css  js  c++  java
  • 【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;
    }
    
    
  • 相关阅读:
    springboot获取application.yml中的配置信息
    springboot+mybatis整合(单元测试,异常处理,日志管理,AOP)
    最近工作中的一些教训
    SAP BADI的“多次使用”(multiple use)
    SAP CRM 忠诚度相关表的关系图
    一个噩梦
    i.s.h.med Enhancement for cancelling an appointment
    一个冷门语言开发者的2016年总结和2017年目标
    装机的几个误区
    关于BAPI_PATIENT_CREATE(病患主数据创建)
  • 原文地址:https://www.cnblogs.com/tanghm/p/12863234.html
Copyright © 2011-2022 走看看