【PAT】B1015 德才论(25 分

#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
struct student{
    int number,de,cai,sum;
}A[100000],//H(<100为优先录取线——德分和才分均不低于此线的被定义为“才德全尽”,
B[100000],//才分不到但德分到线的一类考生属于“德胜才”,
C[100000],//德才分均低于H,但是德分不低于才分的考生属于“才德兼亡”但尚有“德胜才”者
D[100000];//其他达到最低线L的考生也
int num=0;
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.number<B.number;
}
void prr(student *arr,int Si){
    for(int i=0;i<Si;i++){
        printf("%08d %d %d",arr[i].number,arr[i].de,arr[i].cai);
        num--;
        if(num!=0)printf("\n");
    }
}
int main(){
    int N,L,H,AA,BB,CC,DD;
    AA=BB=CC=DD=0;
    student temp;
    scanf("%d%d%d",&N,&L,&H);
    for(int i=0;i<N;i++){
        scanf("%d %d %d",&temp.number,&temp.de,&temp.cai);
        temp.sum=temp.de+temp.cai;
        if(temp.de>=L&&temp.cai>=L){
            num++;
            if(temp.cai>=H&&temp.de>=H){A[AA++]=temp;continue;}
            if(temp.de>=H&&temp.cai<H) {B[BB++]=temp;continue;}
            if(temp.cai<H&&temp.de<H&&temp.de>=temp.cai){C[CC++]=temp;continue;}
            D[DD++]=temp;
        }
    }
    sort(A,A+AA,cmp);
    sort(B,B+BB,cmp);
    sort(C,C+CC,cmp);
    sort(D,D+DD,cmp);
    printf("%d\n",num);
    prr(A,AA);
    prr(B,BB);
    prr(C,CC);
    prr(D,DD);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/hebust/p/9498108.html