问题描述
我们在“渊子数”的题目中已经了解了渊子是个什么样的人了,他在大一的时候参加过工商学院的“英语聚乐部”。告诉你个秘密,这个俱乐部是个好地方,不但活动精彩而且有MM。
这不,英语俱乐部举办了一个叫做“英文金曲大赛”的节目。这个节目有好多人参加,这不,成绩出来了,渊子当是很勇敢,自告奋勇接下了算出大家的总得分的任务。
当时有7个评委,每个评委都要给选手打分,现在要求去掉一个最高分和去掉一个最低分,再算出平均分。结果精确到小数点后两位。输入 测试数据包括多个实例。 每组数据包括7个实数,代表评委们对该选手的评分。紧接着是选手的名字,名字的长度不超过30个字符。
输入直到文件结束。输出 算出每位选手名字和最终得分,结果保留两位小数。
样例输入 10 10 10 10 10 10 9 xiaoyuanwang 0 0 0 0 0 0 0 beast 样例输出
xiaoyuanwang 10.00 beast 0.00
#include<bits/stdc++.h>
using namespace std;
typedef pair<int, string> psi;
bool cmp(psi &re1,psi &re2)//***自定义sort函数的排序方式 升序排列***
{
if (re1.first != re2.first) return re1.first > re2.first;
if (re1.first == re2.first)
{
for (int i = 0; i < re1.second.size() || i < re2.second.size(); i++)
{
if (re1.second[i] != re2.second[i]) return re1.second[i] < re2.second[i];
if (re1.second[i] != re2.second[i]) continue;
}
}
}
bool puanduan(string a, int q[],vector<psi>&re)
{
int sum = 0;
for (int i = 0; i < 4; i++)
{
if (i == 0 || i == 3)
{
if (q[i] < 90)
return 0;
}
if (i == 1 || i == 2)
{
if (q[i] < 60)
return 0;
}
}
for (int i = 0; i < 4; i++)
sum += q[i];
if (sum < 320) return 0;
re.push_back({ sum,a });
}
int main()
{
int t, n;
cin >> t;
while (t--)
{
vector<psi>re;
cin >> n;
while (n--)
{
int q[4];
string a;
cin >> a;
for (int i = 0; i < 4; i++) cin >> q[i];
puanduan(a, q,re);
}
sort(re.begin(), re.end(),cmp);
for (int i = 0; i < re.size(); i++)
{
cout << re[i].second << " " << re[i].first << endl;
}
}
return 0;
}