悬关求调

P1051 [NOIP2005 提高组] 谁拿了最多奖学金

题目中“如果有两位或两位以上的学生获得的奖金最多,输出他们之中在输入文件中出现最早的学生的姓名。”因此用id存出现的顺序sort时若sum相同,比较id。 ```cpp #include<bits/stdc++.h> using namespace std; struct money{ string name,stu,west; int ender,cla,book,sum,id; }; int cnt(money a,money b){ if(a.sum!=b.sum)return a.sum>b.sum; else return a.id<b.id; } int n,summ; money a[1000]; int main() { cin>>n; for(int i=1;i<=n;i++){ a[i].id=i; cin>>a[i].name>>a[i].ender>>a[i].cla>>a[i].stu>>a[i].west>>a[i].book; a[i].sum=0; if(a[i].ender>80&&a[i].book>0) a[i].sum+=8000; if(a[i].ender>85&&a[i].cla>80) a[i].sum+=4000; if(a[i].ender>90) a[i].sum+=2000; if(a[i].ender>85&&a[i].west=="Y") a[i].sum+=1000; if(a[i].cla>80&&a[i].stu=="Y") a[i].sum+=850; summ+=a[i].sum; } sort(a+1,a+1+n,cnt); cout<<a[1].name<<endl<<a[1].sum<<endl<<summ; return 0; } ```
by Jadonyzx @ 2024-03-22 15:21:53


|