题目意思:
利用的就是acm的竞赛排名规则。大意是队伍参见比赛,然后让我们计算排名,第一关键词是过题数,过题数越多的队伍排名越高,排名相同的队伍看第二关键词时间,时间越短的队伍排名越高。
每道题目提交失败还会罚时,但是要注意的是若不通过题目,是不计算罚时的。
/*
本题要点:
1、 每道题都有第一次AC 的时间(秒做单位), 假设为 t1 = 3000, 这道题之前会可能错了很多次, 每错一次, 罚时 1200 秒。假如错三次
罚时 t2 = 1200 * 3;
每道题所花的时间为 t1 + t2 = 3000 + 3600 = 6600 ;
每个队伍,一共 AC 了几道题,算上这些题的所有时间,得到总时间
2、 队伍AC后可能还提交,无论对还是错,时间都是不算的
3、 数据输入的顺序是不一定的,也就是说两次AC,但是后面AC时间是最靠前的,这时后来提交的AC时间要忽略
4、 最后排序是AC->Time->id来排序的
*/
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <map>
using namespace std;
typedef pair<int, int> PII; // 记录 <团队编号, 题目编号>
map<PII, int> min_ac_time; // <团队编号, 题目编号> 到该题 AC 的最早时间
map<PII, int> wa_times; // <团队编号, 题目编号> 所对应的 错误次数
const int MaxN = 1010;
int c, n;
struct Run // 提交
{
int team_id, p_id, time;
int ac;
}runs[MaxN];
struct Team //队伍
{
int team_id, ac_cnt, total_ti;
bool operator<(const Team& rhs)</