<PAT 甲级题>1062 Talent and Virtue

#include<iostream>
#include<algorithm>

using namespace std;

struct student{
    int id;
    int v,t,sum;
    int type;
} stu[100010];

bool cmp(student a,student b){
    if(a.type!=b.type) return a.type<b.type;
    else if(a.sum!=b.sum) return a.sum>b.sum;
    else if(a.v!=b.v) return a.v>b.v;
    else  return a.id<b.id;
}

 int main(){
     int L,H,N;
     int count=0;
     cin>>N>>L>>H;
     
     int i=0;
     for(int k=0;k<N;k++){
         int v,t;
         int id;
         scanf("%d %d %d",&id,&v,&t);
         if(v<L||t<L){
             continue;
         }else{
             stu[i].v=v;    stu[i].t=t;    stu[i].id=id;
             stu[i].sum=v+t;
             if(stu[i].v>=H&&stu[i].t>=H) stu[i].type=1;
             else if(stu[i].v>=H&&stu[i].t<H) stu[i].type=2;
             else if(stu[i].v<H&&stu[i].t<H&&stu[i].v>stu[i].t) stu[i].type=3;
             else stu[i].type=4;
             i++;
         }
     }
     count=i;
     sort(stu,stu+count,cmp);
     cout<<count<<endl;
     for(int i=0;i<count;i++){
       cout<<stu[i].id<<' '<<stu[i].v<<' '<<stu[i].t<<endl;
    }
 }

 不知道是哪里出了错误。

是全部不及格的那些人也必须放入数组中吗?

#include <stdio.h>
#include <string.h>
#include <algorithm>

using namespace std;

struct Student{
    char id[10];
    int de, cai, all;
    int cat; // category
    int getCat(int L, int H){
        if(de < L || cai < L){
            cat = 5;
        }
        else if(de >= H && cai >= H){
            cat = 1;
        }
        else if(de >= H && cai < H && cai >= L){
            cat = 2;
        }
        else if(de < H && cai <= de && cai >= L){
            cat = 3;
        }
        //else if(cai < H && cai > de && de >= L){
        else{
            cat = 4;
        }
        return cat;
    }
}s[100010];

// cat 1: de >= H && cai >= H;
// cat 2: de >= H && cai < H && cai >= L;
// cat 3: de < H && cai <= de && cai >= L;
// cat 4: cai < H && cai > de && de >= L;
// cat 5: de < L && cai < L;

bool cmp(Student a, Student b){
    if(a.cat != b.cat) return a.cat < b.cat;
    else if(a.all != b.all) return a.all > b.all;
    else if(a.de != b.de) return a.de > b.de;
    else return strcmp(a.id, b.id) < 0;
}

int main(void)
{
    int N, L, H, M = 0;
    scanf("%d %d %d", &N, &L, &H);
    for(int i = 0; i < N; i++){
        scanf("%s %d %d", s[i].id, &s[i].de, &s[i].cai);
        s[i].all = s[i].de + s[i].cai;
        if(s[i].getCat(L, H)==5){
            M++;
        }
    }
    sort(s, s+N, cmp);
    int hege = N - M;
    printf("%d\n", hege);
    for(int i = 0; i < hege; i++){
        printf("%s %d %d\n", s[i].id, s[i].de, s[i].cai);
    }
    return 0;
}