luogu#P3892. [GDOI2014] OJ
[GDOI2014] OJ
题目描述
小 M 是一个勤奋的 ACMer,他利用课余时间刷了很多题目。但他是个很健忘的孩子,经常会忘记自己刷过一些什么题目,所以他想写一个 OJ 来管理自己做过的题目。
经过一个星期的努力,小 M 的 OJ 基本成型,只是还差一个 Contest 的模块没有实现。小 M 觉得这个模块很难实现,所以他希望找你来帮忙。
小 M 告诉你,一个 OJ 的基础元素包括:
- 题目,可以用 pid 唯一标识,pid 为正整数;
- 比赛,可以用 cid 唯一标识,cid 为正整数;
- 用户,可以用 uid 唯一标识,uid 为正整数;
- 提交状态,可以由 sid 唯一标识,sid 为正整数。
一个提交状态是由 sid、cid、pid、uid 和 result 组成的,分别表示本条状态的提交 ID,所属比赛 ID,题目 ID,用户 ID 以及评测结果。
简单起见,这里的 result 只有 AC、UNAC 和 WAIT 三种状态,分别表示通过、不通过和等待评测。
同时小 M 提出一个比赛模块需要实现以下请求:
createContest cid t pid_1 pid_2 … pid_t
表示要创建一个比赛,cid 是一个正整数,是这场比赛的唯一标识。
表示这场比赛有 (())道题目,接下来 个不同的整数,表示这场比赛的题目编号。
submission sid cid pid uid result
该条状态的 sid 要么之前没出现过,要么以前出现过,但是被 rejudge 了。
result 为 AC 或者 UNAC。
getRank cid uid
在一场比赛中,所有有提交的用户都应该算在排名内(包括被 rejudge 的提交),用户的排名按照通过的题目数从大到小排序,如果题目数相同,则按随机顺序排序。
该指令需要统计用户 uid 在 cid 这场比赛中的通过目数,最高排名以及最低排名。
值得注意的是,用户 uid 在 cid 这场比赛中同一道题目的多个通过记录只算一次。
输出格式为:uid solved highest lowest
。
分别代表用户 ID,通过题目数量,最高排名以及最低排名,其中 。
rejudge sid
重测以 sid 标识的提交记录,即将该记录的 result 改成 WAIT。
输入格式
第一行三个整数 、、($1\le\mathit{pcnt}\le5000,1\le\mathit{ucnt}\le5000,1\le m\le3\times10^5$),分别表示 OJ 有 pcnt 道题目,ucnt 个用户以及 m 条请求。
pid 的范围是 ,uid 的范围是 ,cid 的范围为 ,。
接下来有 行,每行一个请求,请求为题述四种请求之一,请求需要按输入顺序执行。
你需要注意以下几点:
- 对于
createContest
请求,保证 cid 不会与之前的 createContest 的 cid 重复。 - 对于
submission
请求,在此请求前,保证比赛 cid 已经创建,题目 pid 是该场比赛的题目之一。 - 对于
getRank
指令,在此请求前,保证比赛 cid 已经创建,用户 uid 至少在该比赛中有一个提交记录。 - 对于
rejudge
指令,在此请求前,保证存在以 sid 标识的提交。
输出格式
对于每一个 getRank
请求,根据要求输出用户 ID,通过题目数量,最高排名以及最低排名,整数之间用一个空格隔开。
7 5 17
createContest 1 5 1001 1004 1002 1005 1006
submission 1 1 1001 1 AC
submission 2 1 1001 1 AC
submission 3 1 1001 2 UNAC
submission 4 1 1003 3 UNAC
getRank 1 1
getRank 1 2
getRank 1 3
rejudge 3
submission 3 1 1001 2 AC
getRank 1 2
submission 5 1 1006 2 AC
getRank 1 1
submission 6 1 1006 2 UNAC
getRank 1 2
rejudge 5
getRank 1 2
1 1 1 1
2 0 2 3
3 0 2 3
2 1 1 2
1 1 2 2
2 2 1 1
2 1 1 2
提示
对于 的数据,;
对于 的数据,$1\le\mathit{pcnt},\mathit{ucnt}\le2000,1\le m\le50000$;
对于 的数据,$1\le\mathit{pcnt},\mathit{ucnt}\le5000,1\le m\le3\times10^5,1\le\mathit{cid}\le50$。