P1051 谁拿了最多奖学金 (简单排序)

题目传送门

题意:求最多奖金的学生姓名和奖学金,以及所有人的奖学金总数。

思路:结构体排序即可。

#include<bits/stdc++.h>
using namespace std;
struct p{
	string s;
	int a,b;
	char c,d;
	int e,id,sum;
}f[105];
bool cmp(p x,p y){
	return x.sum==y.sum?x.id<y.id:x.sum>y.sum; 
}
int main(){
	int n,tot=0;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>f[i].s>>f[i].a>>f[i].b>>f[i].c>>f[i].d>>f[i].e,f[i].sum=0,f[i].id=i;
	if(f[i].a>80&&f[i].e>0) f[i].sum+=8e3;
	if(f[i].a>85&&f[i].b>80) f[i].sum+=4e3;
	if(f[i].a>90) f[i].sum+=2e3;
	if(f[i].a>85&&f[i].d=='Y') f[i].sum+=1e3;
	if(f[i].b>80&&f[i].c=='Y') f[i].sum+=850; 
	tot+=f[i].sum;
	}
	sort(f+1,f+n+1,cmp);
	cout<<f[1].s<<endl;
	printf("%d\n%d\n",f[1].sum,tot);
	return 0;
}