测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A5864. 「TJOI2019」甲苯先生的滚榜

编程题 省选/NOI-
知识点

题目描述

甲苯先生在制作一个 Online Judge,他发现做比赛的人们很关心自己的排名(显而易见)。

在 ACM 赛制的比赛中,如果通过题目数量不相等,则通过题目数量多的人排名更靠前;
如果通过题目数量相等,则罚时更少的人排名更高。

甲苯先生想让大家帮忙设计一个程序,每次有人通过之后,就告诉他排名在他的前面有多少人。
(不包括和他罚时题数都相同的同学)

输入格式

第一行输入一个整数 $T$ 表示测试样例的个数。

对于每一个样例,输入三个整数 $m, n, \text{seed}$。
$m$ 表示参赛总人数(编号 $1 \sim m$),$n$ 表示一共有 $n$ 次 AC(假设 AC 已经去重,即不存在相同人的相同题目提交)。
$\text{seed}$ 表示生成数据的种子。

接下来要求同学们使用之下的函数生成数据:
```cpp
typedef unsigned int ui ;
ui randNum( ui& seed , ui last , const ui m){
seed = seed * 17 + last ; return seed % m + 1;
}
```
($\texttt{last}$ 为上一次输出的结果,在没有输出结果时 $\texttt{last} = 7$,多组数据时 $\texttt{last}$ 不需要重新赋值)
要求每次生成两个数据 $\texttt{Ria}, \texttt{Rib}$,表示第 $\texttt{Ria}$ 个人 AC 了一道题目,他的罚时为 $\texttt{Rib}$。
(也就是说 $\texttt{Ria}$ 的题目数量 $+1$,罚时长度 $+\texttt{Rib}$)。

要求一共生成 $n$ 组数据,代表一共有 $n$ 次提交。

对于所有数据,保证罚时总和不超过 $1.5\times 10^6$。

输出格式

每次提交输出一行整数,表示在第 $\texttt{Ria}$ 个人 AC 后,比 $\texttt{Ria}$ 成绩高的有多少个选手。

输入输出样例

输入 #1
1
7 3 1
输出 #1
0
1
0

说明/提示

|测试点 | $1,2$ | $3,4$ | $5$ | $6,7,8$ | $9,10$ |
|:-:|:-:|:-:|:-:|:-:|:-:|
|$T$ | $\le 10$ | $\le 5$ | $\le 15$ | $\le 5$ | $\le 5$ |
|$m$ | $\le 1000$ | $\le 10000$ | $\le 10^5$ | $\le 10^4$ | $\le 10^5$ |
|$n$ | $\le 1000$ | $\le 10000$ | $\le 10^5$ | $\le 10^6$ | $\le 10^6$ |
上一题 去做题 下一题