题解:P13797 [SWERC 2023] Programming-trampoline-athlon!
思路
题面很长,但其实就是个模拟。
首先每个队这么多数据肯定要用结构体存的,这点不用多说。
我们边输入边计算每队得分,得分是编程得分和蹦床得分的和。编程得分为解决的问题数乘以
然后就可以排序了。按得分降序排序,得分相同就按输入顺序升序排序。另外还要检查比其得分高的队伍数量是否不超过
代码
#include<bits/stdc++.h>
using namespace std;
int n,p,e[6],sum,c[100001];
string s;
struct z{
int s,id;
string c;
}t[100001];
bool cmp(z a,z b){
if(a.s!=b.s)return a.s>b.s;
return a.id<b.id;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>s>>p;
for(int j=0;j<6;j++){
cin>>e[j];
}
sort(e,e+6);
t[i].s=p*10+e[1]+e[2]+e[3]+e[4];
t[i].id=i;
t[i].c=s;
}
sort(t+1,t+n+1,cmp);
c[1]=0;
for(int i=2;i<=n;i++){
if(t[i].s<t[i-1].s){
c[i]=i-1;
}
else{
c[i]=c[i-1];
}
}
for(int i=1;i<=n;i++){
if(c[i]<=2){
cout<<t[i].c<<" "<<t[i].s<<endl;
}
else break;
}
return 0;
}