当前位置: 代码迷 >> 综合 >> 1015 德才论 (25 分)
  详细解决方案

1015 德才论 (25 分)

热度:90   发布时间:2023-12-05 06:54:19.0

 题目来源

https://pintia.cn/problem-sets/994805260223102976/problems/994805307551629312

#include<iostream>
#include<cstring>
#include<algorithm> 
using namespace std;
struct stud{char id[10]; //准考证号int de,cai,sum; //德分,才分,总分int flag; //考生类别:第1类~第5类}stu[100010];bool cmp(stud a,stud b)
{if(a.flag!=b.flag) return a.flag<b.flag;//按类别从小到大else if(a.sum!=b.sum) return a.sum>b.sum; //类别相同的,按总分从大到小排序else if(a.de!=b.de) return a.de>b.de; //总分相同的,按德分从大到小排序else return strcmp(a.id,b.id)<0; //德分相同的,按准考证号从小到大排序}int main()
{int N,L,H; //N为考生总数,L为最低录取分数线,K为最优录取分数线cin>>N>>L>>H;int m=N; //m为及格人数for(int i=0;i<N;i++){cin>>stu[i].id>>stu[i].de>>stu[i].cai;stu[i].sum=stu[i].de+stu[i].cai; //计算总分if(stu[i].de<L||stu[i].cai<L){stu[i].flag=5;m--; //及格人数减一}else if(stu[i].de>=H&&stu[i].cai>=H) stu[i].flag=1;else if(stu[i].de>=H&&stu[i].cai<H) stu[i].flag=2;else if(stu[i].de<H&&stu[i].cai<H&&stu[i].de>=stu[i].cai) stu[i].flag=3;else stu[i].flag=4;}sort(stu,stu+N,cmp); //排序cout<<m<<endl; //输出及格人数for(int i=0;i<m;i++){cout<<stu[i].id<<" "<<stu[i].de<<" "<<stu[i].cai<<endl;}return 0;
}