POJ 2379 ACM Rank Table 排序, map

博客详细解析了ACM竞赛中排名计算的规则,重点在于过题数和解题时间。首先,排名依据是过题数,过题数相同则比较解题总时间,时间越短排名越高。每个队伍的总时间包括首次成功解答每道题的秒数加上之前尝试失败的罚时。需要注意的是,只有成功的提交才会计算时间,后续的提交不论结果如何都不计入时间。排序时需按照过题数、时间及队伍ID进行综合排序。
摘要由CSDN通过智能技术生成

题目意思:
利用的就是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)</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值