0基础PAT乙级刷题之路(六)-1015 德才论 (25分)

这道题走了弯路.

0基础PAT乙级刷题之路(六)-1015 德才论 (25分)_第1张图片

#include
using namespace std;

typedef struct{
    int num;
    int De;
    int Cai;
    int sum;
}student;

bool cmp(student a,student b){
    if(a.sum!=b.sum) return a.sum>b.sum;
    else if (a.sum==b.sum&&a.De!=b.De) return a.De>b.De;
    else if (a.sum==b.sum&&a.De==b.De) return a.num<b.num;
    else return 0;
}

int main(void){
    std::ios::sync_with_stdio(false);
    int N,L,H;
    int count=0;
    cin>>N>>L>>H;
    vector<student> stu(N);
    
    for(int i=0;i<N;i++){
        cin>>stu[i].num>>stu[i].De>>stu[i].Cai;
        stu[i].sum = stu[i].De+stu[i].Cai;
    }//输入
    sort(stu.begin(),stu.end(),cmp);//按cmp里面写的规则排序
    
    //我们已经得到正确的序列了,下面来求需要输出几个人,这里我们从后往前
    for(int i =N-1;i>=0;i--){
        if(stu[i].De<L||stu[i].Cai<L) {
            stu[i].sum = 0;
        }
    }
    for(int i=0;i<N;i++){
        if(stu[i].sum!=0) count++;
    }

    //此时count里面保存了需要输出的人的个数;
    cout<<count<<"\n";
    for(int i=0;i<N;i++)
        if(stu[i].De>=H && stu[i].Cai>=H && stu[i].De>=L && stu[i].Cai>=L&& stu[i].sum!=0)
            cout<<stu[i].num<<" "<<stu[i].De<<" "<<stu[i].Cai<<"\n";
    //以上是第一类
    for(int i=0;i<N;i++)
        if(stu[i].De>=H && stu[i].Cai<H && stu[i].De>=L && stu[i].Cai>=L && stu[i].sum!=0)
            cout<<stu[i].num<<" "<<stu[i].De<<" "<<stu[i].Cai<<"\n";
    //以上是第二类
    for(int i=0;i<N;i++)
        if(stu[i].De<H && stu[i].Cai<H && stu[i].De>=stu[i].Cai && stu[i].De>=L && stu[i].Cai>=L && stu[i].sum!=0)
            cout<<stu[i].num<<" "<<stu[i].De<<" "<<stu[i].Cai<<"\n";
    //以上第三类
    for(int i=0;i<N;i++)
        if(stu[i].De<H && stu[i].De<stu[i].Cai && stu[i].De>=L && stu[i].Cai>=L && stu[i].sum!=0)
            cout<<stu[i].num<<" "<<stu[i].De<<" "<<stu[i].Cai<<"\n";
    //以上第四类
}

你可能感兴趣的:(PAT乙级)