经验总结:
1、使用结构体存储考生信息。
2、使用vector数组存储四类考生的信息。
3、使用sort和自定义排序方法排序。
刚开始提交时发现耗时特别大,达到了300ms,差点就超时了。然后发现输入的数据量过大了(105),然后用的又是cin和cout方式。改为scanf和printf方式,耗时会少很多。
C++代码:
#include<bits/stdc++.h>
using namespace std;
struct stu{
int name;
int defen;
int caifen;
stu(){}
};
bool cmp(stu a,stu b){
int asum = a.defen+a.caifen;
int bsum = b.defen+b.caifen;
if(asum == bsum){
if(a.defen==b.defen) return a.name<b.name;
return a.defen>b.defen;
}
return asum>bsum;
}
int main() {
int n,l,h,cnt = 0;
scanf("%d %d %d",&n,&l,&h);
stu stus[n];
vector<stu> rank[4];
for(int i=0;i<n;i++){
scanf("%d %d %d",&stus[i].name,&stus[i].defen,&stus[i].caifen);
cnt++;
if(stus[i].defen>=l&&stus[i].caifen>=l){
if(stus[i].defen>=h&&stus[i].caifen>=h) rank[0].push_back(stus[i]);
else if(stus[i].defen>=h) rank[1].push_back(stus[i]);
else if(stus[i].defen>=stus[i].caifen) rank[2].push_back(stus[i]);
else rank[3].push_back(stus[i]);
}else cnt--; //不满足录取最低分数线条件
}
printf("%d\n",cnt);
for(int i=0;i<4;i++){
sort(rank[i].begin(),rank[i].end(),cmp);
for(auto it=rank[i].begin();it!=rank[i].end();it++){
printf("%d %d %d\n",it->name,it->defen,it->caifen);
}
}
return 0;
}