-
题目
-
思路
- 把各类考生存入各个数组,排序即可
-
代码
#include <iostream> #include <algorithm> #include <vector> using namespace std; struct student{ int id,de,cai,sum; }temp; bool cmp(student a,student b){ if(a.sum!=b.sum) return a.sum>b.sum; else if(a.de!=b.de) return a.de>b.de; else return a.id<b.id; } int main(){ int n,l,h,cnt=0; cin>>n>>l>>h; vector<student> v1,v2,v3,v4; for(int i=0;i<n;i++){ int tid,tde,tcai; cin>>tid>>tde>>tcai; temp.id=tid; temp.de=tde; temp.cai=tcai; temp.sum=tcai+tde; if(tde>=l&&tcai>=l){ //德分和才分均不低于 L 的考生才有资格被考虑录取 cnt++; if(tde>=h&&tcai>=h){ //德分和才分均不低于此线的被定义为“才德全尽”,此类考生按德才总分从高到低排序 v1.push_back(temp); }else if(tcai<h&&tde>=h){ //才分不到但德分到线的一类考生属于“德胜才”,也按总分排序 v2.push_back(temp); }else if(tde<h&&tcai<h&&tde>=tcai){ //德才分均低于 H,但是德分不低于才分的考生属于“才德兼亡”但尚有“德胜才”者,按总分排序 v3.push_back(temp); }else{ v4.push_back(temp); } } } sort(v1.begin(),v1.end(),cmp); sort(v2.begin(),v2.end(),cmp); sort(v3.begin(),v3.end(),cmp); sort(v4.begin(),v4.end(),cmp); printf("%d\n",cnt); for(int i=0;i<v1.size();i++){ cout<<v1[i].id<<" "<<v1[i].de<<" "<<v1[i].cai<<endl; } for(int i=0;i<v2.size();i++){ cout<<v2[i].id<<" "<<v2[i].de<<" "<<v2[i].cai<<endl; } for(int i=0;i<v3.size();i++){ cout<<v3[i].id<<" "<<v3[i].de<<" "<<v3[i].cai<<endl; } for(int i=0;i<v4.size();i++){ cout<<v4[i].id<<" "<<v4[i].de<<" "<<v4[i].cai<<endl; } }