刷题日记(2)结构体排序以及pair排序

问题描述
我们在“渊子数”的题目中已经了解了渊子是个什么样的人了,他在大一的时候参加过工商学院的“英语聚乐部”。告诉你个秘密,这个俱乐部是个好地方,不但活动精彩而且有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;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值