#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;
}