专栏文章

题解:P13797 [SWERC 2023] Programming-trampoline-athlon!

P13797题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minypc2a
此快照首次捕获于
2025/12/02 10:31
3 个月前
此快照最后确认于
2025/12/02 10:31
3 个月前
查看原文

思路

题面很长,但其实就是个模拟。
首先每个队这么多数据肯定要用结构体存的,这点不用多说。
我们边输入边计算每队得分,得分是编程得分和蹦床得分的和。编程得分为解决的问题数乘以 1010。蹦床得分为去掉最高和最低分后的四个中间分的总和。
然后就可以排序了。按得分降序排序,得分相同就按输入顺序升序排序。另外还要检查比其得分高的队伍数量是否不超过 22

代码

CPP
#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;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...