POJ1581竞赛决定
问题描述:
判断编程竞赛是一项艰苦的工作,要求参赛者、单调乏味的决定和单调乏味的工作。更不用说12小时内只吃甜甜圈、比萨饼和苏打水作为食物的营养问题了。不过,这也会带来很多乐趣。
自动化评判过程的软件是一个很大的帮助,但是众所周知的一些竞赛软件的不可靠性使人们希望有更好的东西可用。您是试图基于模块化设计原理开发更好、开源、竞赛管理软件的团队中的一员。
你的组件是用来计算编程竞赛队的分数和确定胜利者。你将得到来自几个球队的结果,并且必须确定胜利者。
得分
一个团队的得分有两个组成部分。首先是问题的解决。第二个是惩罚点,它反映了在解决问题之前作出的时间和错误提交的时间。对于正确解决的每个问题,罚分等于解决问题的时间加上每次错误提交的20分钟。没有惩罚点被添加到从未解决的问题中。
所以如果一支球队在第二次投球时在二十分钟内解决了一个问题,他们将被罚40分。如果他们提交问题2次三次,但不解决,则不收取任何罚金点。如果他们提交问题3一次,并在120分钟内解决,他们将被罚120罚分。他们的总分是两个问题,用160个点数来解决。
胜利者是解决大多数问题的团队。如果球队为了解决大多数问题而打平,那么胜利者就是罚点数最少的球队。
输入:
对于你的程序正在进行的编程竞赛,有四个问题。你保证输入不会导致队之间在扣分后打成平局。
第1行<团队>
第2行-N+1 < Name > P1SUP> P1TIME> <2SUP> <2P>< P4TIME >
行中的第一个元素是团队名称,它不包含空格。接下来,对于四个问题中的每一个,是团队提交针对该问题的运行的次数以及正确解决问题的时间(两个整数)。如果一个团队没有解决问题,时间将是零。如果问题解决,提交的数量将至少是一个。
输出:
输出由单行组成,其中列出了获胜的团队的名称、他们解决的问题的数量以及罚时。
Sample Input
4 Stars 2 20 5 0 4 190 3 220 Rockets 5 180 1 0 2 0 3 100 Penguins 1 15 3 120 1 300 4 0 Marsupials 9 0 3 100 2 220 3 80
Sample Output
Penguins 3 475
简析:用结构体存储,再用优先队列按解题数和罚时排序,最后输出队列首元素。
代码如下:
//
// POJ1581.cpp
// VOJ编程
//
// Created by Mac on 2018/9/20.
// Copyright © 2018年 Mac. All rights reserved.
//
#include <iostream>
#include <string>
#include <algorithm>
#include <queue>
using namespace std;
struct node{
string name;
int sol;
int wpt;
bool operator < (const node &a) const{
if(sol==a.sol){
return wpt > a.wpt;
}
else
return sol < a.sol;
}
};
int main(){
priority_queue<node> q;
node t;
int n;
cin>>n;
while (n--) {
int a,b;
t.wpt = 0;
t.sol = 0;
cin>>t.name;
for (int i=1; i<=4; i++) {
cin>>a>>b;
if (b!=0) {
t.sol++;
t.wpt += (b+20*(a-1));
}
}
q.push(t);
}
t = q.top();
cout<<t.name<<" "<<t.sol<<" "<<t.wpt<<endl;
return 0;
}