18290 校赛排名2

Description

下面是校赛的排名规则:
比赛期间,提交代码后,系统会返回正确或错误等结果。最后的获胜者为正确解答题目最多,如果同题数则总用时最少的队伍。
每道试题的时间花费将从竞赛开始到试题提交并且被判定为正确为止,其间每一次提交运行结果被判错误的话将被加罚20分钟时间,
未正确解答的试题不记时,如果已经返回正确的题目再重复提交则不影响结果。
例如:A、B两队都正确完成两道题目,其中A队提交这两题的时间分别是比赛开始后60分钟和165分钟,B队为80分钟和130分钟,
但B队第一个题提交了2次才通过。这样A队的总用时为60+165=225而B队为(80+20)+130=230,所以A队以总用时少而获胜。
现在给出裁判机上面所有队伍的提交时间(分钟数)和返回结果,需要你编程输出当前比赛的排行榜。

注:0题的队伍不需要输出

输入格式

每行一个评判结果,格式为:时间(第几分钟提交的)+半角空格+队名+半角空格+题号+半角空格+评判结果(0通过,其它为出错)

题号由大写A字符开始,第2题是B,依次类推,最多不超过15题
所有评判结果已经按时间排序好

输出格式

输出排名,一行一个,格式为队名+半角空格+通过题数+半角空格+罚时

注:0题的队伍不需要输出
测试数据中,没有同题且同罚时的情况

输入样例

2 abc A 4
5 abc B 0
6 def A 0
10 abc A 0
13 xyx A 4
20 def B 5

输出样例

abc 2 35
def 1 6
#include<iostream>
#include<algorithm>
#include<sstream>
#include<math.h>
#include<vector>
#include<queue>
#include<list>
#include<map>
#include<set>
#include<string>
#include<stdio.h>
#include<ctype.h>
#include<cstring>
#include<cstdlib>
#include<iomanip>
using namespace std;
typedef long long ll;
struct acproblem
{
	int cor_time=-1;
	int cnt=0;
	int total=0;
};
struct team
{
	int num;
	int punish_time;
	string name;
	bool operator <(const team& a)const
	{
		if (num != a.num) return num > a.num;
		else
		{
			return punish_time < a.punish_time;
		}
	}
};
map<string, vector<acproblem>>m;
void init(string s)
{
	acproblem a;
	a.cor_time = -1;
	for (int i = 0; i < 15; i++)
	{
		m[s].push_back(a);
	}
}
int main()
{
	//freopen("in.txt", "r", stdin);
	//ios::sync_with_stdio(0);
	char ch[2000]="\0";
	int  time, flag;
	char name;
	while (scanf("%d %s %c %d", &time, ch, &name, &flag)>0)
	{
		string s = ch;
		if (m.count(s) == 0)
		{
			init(s);
		}
		if (m[s][name - 'A'].cor_time == -1)
		{
			if (flag == 0)
			{
				m[s][name - 'A'].cor_time = time;
				m[s][name - 'A'].total = time + 20 * m[s][name - 'A'].cnt;
			}
			else
			{
				m[s][name - 'A'].cnt++;
			}
		}
	}
	vector<team>v;
	map<string, vector<acproblem>>::iterator it = m.begin();
	for (; it != m.end(); it++)
	{
		team a;
		int time = 0;
		int num = 0;
		a.name = (*it).first;
		for (int i = 0; i < 15; i++)
		{
			if ((*it).second[i].cor_time != -1)
			{
				num++;
				time += (*it).second[i].total;
			}
		}
		a.punish_time = time;
		a.num = num;
		v.push_back(a);
	}
	sort(v.begin(), v.end());
	for (int i = 0; i < v.size(); i++)
	{
		if (v[i].num)
		{
			cout << v[i].name << " " << v[i].num << " " << v[i].punish_time << "\n";
		}
		else
		{
			break;
		}
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个问题非常有趣!首先,你需要明确的是这个评分系统的标准,比如歌曲的技巧、表演的表现力、歌词的原创性等。然后,你可以使用C语言编写一个程序,用来统计和评估每位参赛者的表现,然后根据评分系统的标准给出最终的得分。最后,你可以将最终的得分结果发布到学校的网站上,以便所有人都可以看到。 ### 回答2: 校园歌手大奖赛评分系统可以用C语言来编写。首先,我们需要定义比赛参与者的信息,比如姓名、学号、性别等。然后,我们可以为每个参赛选手创建一个结构体,用于存储他们的信息。 接下来,我们需要定义评委打分的规则。一般来说,每位评委可以给选手的表演打1-10分的分数。为了方便,我们可以使用一个二维数组来存储评委的打分,其中第一个维度是选手的序号,第二个维度是评委的序号。 在程序运行时,可以要求评委逐一输入打分,并存储在对应的位置上。例如,如果第一个评委打给第三位选手的分数是8分,则可以在数组中以`scores[3][0] = 8;`的方式存储。 接下来,我们可以计算每位选手的最终得分。一种简单的方法是去掉最高分和最低分,然后计算剩余分数的平均值。可以使用一个循环来遍历每位选手的分数,找到最高分和最低分,并累加剩余分数。 最后,我们可以输出每位选手的得分,并根据得分排序,以决定比赛的名次。可以使用冒泡排序或选择排序等算法对选手按照得分进行排序,并输出排序结果。 在编写程序时,我们还可以考虑加入错误处理机制,比如输入分数时进行范围判断,确保评委输入的分数在合理范围内。此外,可以为每位选手添加更多的信息,如歌曲信息、学院、年级等,以进行更全面的评分和展示。 综上所述,这是一个简单的校园歌手大奖赛评分系统的C语言实现。将这些步骤编写成函数,并在主函数中调用即可完成该评分系统的编写。 ### 回答3: 校园歌手大奖赛评分系统的设计可以使用C语言来实现。首先,我们需要定义一个数据结构来存储每位参赛选手的信息,包括姓名、学校、参赛曲目和评分等字段。可以使用结构体来表示这些信息。 然后,我们可以设计一个函数来录入选手信息,包括姓名、学校和参赛曲目,并为选手分配一个唯一的参赛编号。可以使用动态内存分配来实现选手信息的录入,以便可以根据需要增加或删除选手信息。 接着,我们可以设计一个评委打分的函数。该函数可以根据选手的编号和评委的编号,要求评委输入一个分数。可以使用数组来存储评委的分数,并计算平均分。在打分过程中,应该考虑评委可能会出现失误或极端评分的情况,因此可以对输入的分数进行合理性检查和处理。 最后,我们可以设计一个函数来计算选手得分排名。该函数可以根据选手的评分,按照一定的规则进行排名,并输出排名结果。 除此之外,我们还可以考虑设计一个查询选手信息的功能,让用户可以根据选手的编号或姓名来查询选手的详细信息。 综上所述,C语言可以通过结构体、动态内存分配、数组和函数等特性来实现校园歌手大奖赛的评分系统。通过合理的设计和实现,可以实现录入选手信息、评委打分、计算得分排名和查询选手信息等功能,从而提供一个完善的评分系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值