PAT 乙级 1015 德才论 (25 分)

题目:PAT 乙级 1015 德才论 (25 分)

经验总结:
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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值