2082. cats 与最小罚时 2

时间限制 2000 ms   内存限制 512 MB

cats 正在参加一场 ICPC 规则的程序设计竞赛。这场程序设计竞赛共有 $n$ 个题,比赛时长为 $m$ 分钟。cats 在这场比赛中一共进行了 $k$ 次提交,其中第 $i$ 个提交的时间为第 $a_i$ 分钟,提交的题为 $b_i$,提交的状态可能为 AcceptedRejectedRunning 三种中的一种。保证所有提交的时间两两互不相同。

在一场 ICPC 规则的程序设计竞赛中,除通过的题目数量外,还有一个很重要的评价标准:罚时。在题目通过数量相同的情况下,罚时越少,排名越靠前。ICPC 规则下的通过题目数量和罚时计算方法如下:

  1. 对于每个题,如果存在一个在这个题上的提交状态为 Accepted,则这个题目视为被通过。否则,这个题视为未被通过。注意,即使存在多个在这个题上的提交状态为 Accepted,这个题也只算作一个通过的题目,而不会计算多次。

  2. 如果一个题未被通过,那么它对罚时产生的贡献为 $0$。

  3. 如果一个题被通过,那么按时间顺序从小到大找到第一个在这个题上状态为 Accepted 的提交,这个题对罚时产生的贡献为这个提交的时间与在这个题上比这个提交时间更早的状态为 Rejected 的提交个数乘 $20$ 分钟之和。例如,如果一个题有 $5$ 个提交,提交时间分别为 $201$,$244$,$275$,$295$,$297$ 分钟,提交的状态分别为 Rejected,Rejected,Accepted,Rejected,Accepted,那么第一个在这个题上状态为 Accepted 的提交为第 $275$ 分钟的提交,比这个提交更早的状态为 Rejected 的提交有 $2$ 个,所以这个题对罚时的贡献为 $275 + 2\times 20 = 315$ 分钟。

  4. 所有题目对罚时的贡献之和即为这场比赛的总罚时。

cats 现在想知道,如果将所有状态为 Running 的提交替换为 AcceptedRejected 两种中的任意一种,如果他最终通过的题目数量刚好为 $x$,他能获得的最小的总罚时是多少。对于 $1$ 到 $n$ 之间的每一个正整数 $x$,你需要分别给出答案。如果无论如何替换都无法让 cats 通过刚好 $x$ 道题,请输出 -1

输入数据

输入的第一行为一个整数 $T(1\le T\le 10^4)$ ,表示测试点的总数 。

对于每个测试点:

第一行为三个整数 $n,m,k(1 \leq n,k \leq 2\cdot 10^5,k\leq m \leq 10^9)$,表示比赛中题目的总数,比赛时长和 cats 提交的总次数。

接下来 $k$ 行,每行为两个整数 $a_i,b_i (1\leq a_i \leq m,1\leq b_i \leq n)$ 和一个字符串 $s_i$ 组成,表示 cats 的第 $i$ 个提交的时间,提交的题目和提交的状态。保证 $s_i$ 为 AcceptedRejectedRunning 三种中的一种。保证对于任意的 $1\leq i< j\leq k$,$a_i\neq a_j$。

保证所有测试点的 $n$ 之和不超过 $2\times 10^5$,保证所有测试点的 $k$ 之和不超过 $2\times 10^5$。

输出数据

对于每个测试点,输出一行 $n$ 个整数,其中第 $i$ 个整数表示当 cats 最终通过的题目数量刚好为 $i$ 时,他能获得的最小的总罚时是多少。如果无论如何替换都无法让 cats 通过刚好 $i$ 道题,请输出 -1

样例输入

复制
4
2 100 4
65 1 Accepted
30 2 Running
25 2 Rejected
85 1 Running
5 300 8
160 5 Accepted
150 4 Rejected
30 2 Running
210 4 Accepted
200 4 Rejected
40 3 Running
20 2 Rejected
90 5 Running
1 100 2
99 1 Rejected
100 1 Rejected
3 1000000000 4
1000000000 1 Accepted
999999997 3 Rejected
999999998 2 Accepted
999999999 3 Accepted \n
 ·   · \n
  · ·        \n
  · ·       \n
  · ·        \n
  · ·       \n
 ·   · \n
   · ·        \n
   · ·        \n
  · ·       \n
   · ·        \n
   · ·        \n
  · ·       \n
  · ·        \n
  · ·       \n
 ·   · \n
  · ·        \n
   · ·        \n
 ·          · \n
          · ·        \n
         · ·        \n
         · ·        \n
         · ·        \n

样例输出

复制
65 115
-1 340 380 430 -1
-1
-1 -1 3000000017  ·   \n
  ·   ·   ·   ·  \n
  \n
  ·  ·          \n

样例说明

对于第一组测试数据,你可以将第二个和第四个提交的状态均变为 Rejected,这样你的通过题目数量为 $1$,罚时为 $65$。你也可以将第二个和第四个提交的状态均变为 Accepted,这样你的通过题目数量为 $2$,罚时为 $115$。可以证明在通过题目数量相同的情况下,不存在使罚时更小的替换方案。

对于第三组测试数据,由于没有状态为 Running 的提交,而你当前通过题目数量为 $0$,无论如何都无法让通过题目数量刚好为 $1$,所以你需要输出 $-1$。

提交

请先 登录

© 2025 FAQs Contact About