评判程序竞赛是一项艰苦的工作,有苛刻的参赛者、冗长的决定和单调的工作。更不用说只吃甜甜圈、比萨饼和苏打水12小时的营养问题了。尽管如此,这还是很有趣的。
自动化评审过程的软件是一个很大的帮助,但众所周知的不可靠性的一些竞赛软件使人们希望更好的东西是可用的。您是基于模块化设计原则开发更好、开放源代码、竞赛管理软件的团队的一员。
您的组件将用于计算编程竞赛队的分数和确定获胜者。你将得到来自几个队的结果,并且必须确定胜利者。
打分
一支球队的得分有两个组成部分。一是解决问题的数量。第二项是罚分,反映问题解决前所需的时间和不正确的意见书。对于每一个正确解决的问题,罚分是相等于问题解决的时间加20分钟对每一个不正确的提交。对于从未解决的问题,没有加分。
因此,如果一支球队在第二次投案时在20分钟内解决了问题,他们将被罚40分。如果他们三次提交问题2次,但没有解决问题,他们就不会被罚款。如果他们提交问题3一次,并在120分钟内解决,他们将被罚120分。他们的总分是160个点球,解决了两个问题。
胜利者是解决问题最多的团队。如果球队为了解决大多数问题而打成平手,那么胜利者就是点球得分最少的球队。
输入
对于你的程序评测比赛,有四个问题。你可以保证输入法不会在计算点球分数后导致球队之间的平局。
第1行
第2-n+1行<名称>.
行中的第一个元素是团队名称,它不包含空格。接下来,对于这四个问题中的每一个,是团队为该问题提交运行的次数以及正确解决问题的时间(两个整数)。如果一个团队没有解决一个问题,时间将为零。如果问题得到解决,提交的材料将至少有一份。
输出量
输出包括一行,列出获胜的球队的名称、他们解决的问题的数量以及他们的点球点数。
样本输入
4
明星2 20 5 0 4 190 3 220
火箭5 180 1 0 2 0 3 100
企鹅1 15 3 120 1 300 4 0
袋类动物9 0 3 100 2 220 3 80
样本输出
企鹅3 475
罚时就是错误提交次数*20+(解决总时间)
比如企鹅
time=1*15+(2*20+120)+1*300)
#include <iostream>
using namespace std;
const int N = 4;
const int M = 20;
struct team {
string name;
int psub[N], ptime[N];
int total, time;
} maxv, a;
int main()
{
int n;
maxv.total = -1;
cin >> n;
for(int i=1; i<=n; i++) {
// 输入数据:一个队
cin >> a.name;
for(int j=0; j<N; j++)
cin >> a.psub[j] >> a.ptime[j];
// 计算题数和用时(total, time)
a.total = 0;
a.time = 0;
for(int j=0; j<N; j++)
if(a.ptime[j] > 0) {
a.total++;
a.time += a.ptime[j] + (a.psub[j] - 1) * M;
}
// 选取最大值
if(a.total > maxv.total) {
maxv.name = a.name;
maxv.total = a.total;
maxv.time = a.time;
} else if(a.total == maxv.total && a.time < maxv.time) {
maxv.name = a.name;
maxv.total = a.total;
maxv.time = a.time;
}
}
cout << maxv.name << " " << maxv.total << " " << maxv.time << endl;
return 0;
}