2013 ACM-ICPC 亚洲区域赛 成都现场赛I 解题报告

现场这题写的好挫,最后也没调出来,今天改良了一下代码,找到了BUG,终于AC了~

我深深的SB了好久,这题是队名字典序大的排前面Orz....


简单回顾下题意,给出N个(N<=50000)个提交,包括队名,题目,时间,返回,然后让你输出比赛结束封榜状态下的榜,滚board的过程和最终榜

首先5W个提交暴力撸是不行了,需要set优化一下


我们先封装一个Team结构体,包括队名,解题数,罚时什么的,然后对于每个题目,记录ac时间,封榜前(后)是否通过,封榜前no的数量,封榜后的提交数,和总的no的数量

然后重载一下<运算符,用索引扔到set里面,每次从最后面取出一支队并删掉,对这个队relax一下,就是处理当前的第一个pending,我用了一个vector存的

处理之后就可以看看插回去的时候他在哪,如果不是最后一名了,就说明rank有变化

同时如果取出的队伍pending.size()为0,就说明这个队已经没有pending了,直接从set里删掉就好


现场的时候脑残没写索引,华丽丽的TLE了,这种结构体里面元素多的时候还是直接上索引吧

另外提交不是按时间给出的,也要先读入再排一下序


最后我把一个队交题(add)和处理pending(relax)都封装在Team结构体里面了,这样代码清晰了很多


剩余的输出部分主要就是细节了,注意一下就好,尤其注意The team whose name comes later in lexicographical order will place higher


具体的细节可以参考代码


 

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <map>
#include <string>
#include <set>
using namespace std;

#define eps 1e-8
#define LL long long
#define mod 1000000007
#define mxn 50005

int n, m, T, t, cnt;

struct Team {
    string name;
    int solve, penalty;
    int ac_time[26];
    int submit_forzen[26]; //封榜前交了多少no
    int su
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值