题目描述 https://www.luogu.org/problemnew/show/P1051
先把每个人的分数算出,再按多因素排序
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct node
{
char name[25];
int sc,nm;
}a[105];
int n,sum;
bool cmp(const node &a,const node &b)
{
if(a.sc!=b.sc) return a.sc>b.sc;
return a.nm<b.nm;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int fn,gr,lw;
char c1,c2;
cin>>a[i].name>>fn>>gr>>c1>>c2>>lw;
if(lw>=1&&fn>80) a[i].sc+=8000;//院士 8000
if(fn>85&&gr>80) a[i].sc+=4000;//五四 4000
if(fn>90) a[i].sc+=2000;//成绩 2000
if(fn>85&&c2=='Y') a[i].sc+=1000;//西部 1000
if(gr>80&&c1=='Y') a[i].sc+=850;//班级 850
a[i].nm=i;
sum+=a[i].sc;
}
sort(a+1,a+n+1,cmp);
cout<<a[1].name<<endl<<a[1].sc<<endl<<sum;
return 0;
}