#include<iostream>
#include<vector>
#include<numeric>
#include<string>
#include<cmath>
#include<algorithm>
class gra
{
public:
int x;//序号
int y;//分数
gra() : x(0), y(0) {} // 默认构造函数
gra(int x,int y)
{
this->x=x;
this->y=y;
}
};
//自定义比较函数
bool compareByX(const gra &a, const gra &b) {
return a.y > b.y;
}
using namespace std;
int main()
{
int n;
cin>>n;
vector<vector<int>> s1(6,vector<int>(9,0));//基础8题
vector<vector<int>> s2(6,vector<int>(5,0));//进阶4题
vector<vector<int>> s3(6,vector<int>(4,0));//登顶3题
vector<int> grade(6,0); //个人所得有效分
int sum1=0,sum2=0,sum3=0;
int sum=0;//团队总分
for(int i=1;i<=n;i++)
{
int num; //队员编号
string s; //题目号
int score; //分数
cin>>num>>s>>score;
int tihao=s[3]-'0'; //题号
if(s[1]=='1') //s[1]表示题目类型,(基础题,进阶题,登顶题)
{
if(score>s1[num][tihao])
{
s1[num][tihao]=score; //取最高分
}
}
else if(s[1]=='2')
{
if(score>s2[num][tihao])
{
s2[num][tihao]=score; //取最高分
}
}
else if(s[1]=='3')
{
if(score>s3[num][tihao])
{
s3[num][tihao]=score; //取最高分
}
}
}
vector<gra> grad; //每位队员的编号和总分
for(int j=1;j<=5;j++)
{
vector<int> a(3,0);
a[0]=accumulate(s1[j].begin(),s1[j].end(),0);//基础题分数
sum1+=a[0]; //计入总分
a[1]=accumulate(s2[j].begin(),s2[j].end(),0);//进阶分数
sum2+=a[1]; //计入总分
a[2]=accumulate(s3[j].begin(),s3[j].end(),0);//登顶分数
sum3+=a[2]; //计入总分
grade[j]=a[0];
if(a[0]>60)
{
grade[j]+=a[1];
if(a[1]>25)
{
grade[j]+=a[2];
}
}
gra cla(j,grade[j]);
grad.push_back(cla);
}
sort(grad.begin(),grad.end(),compareByX);
sum=sum1;
//输出团队总分
if(sum1>300)
{
sum+=sum2;
if(sum2>125)
{
sum+=sum3;
}
}
cout<<sum<<endl;
//输出排序后的分数
for(gra m:grad)
{
cout<<m.x<<" "<<m.y<<endl;
}
system("pause");
return 0;
}
天梯赛团队总分
最新推荐文章于 2024-09-25 13:54:13 发布
该篇文章介绍了如何使用C++编程实现一个团队竞赛成绩管理系统,包括输入队员分数、按题型分类、计算个人及团队总分,并对成绩进行排序。
摘要由CSDN通过智能技术生成