QOJ.ac

QOJ

Time Limit: 2.0 s Memory Limit: 1024 MB Total points: 100 Hackable ✓

#18372. 洛克王国世界

Statistics

tarjen 最近一直在玩洛克王国,并且想要捕捉一些闪光精灵(shiny spirits)。

为了刷闪光精灵,tarjen 必须首先重复捕捉普通精灵。捕捉普通精灵会累积闪光池(shiny pool)的污染进度。当污染进度达到所需阈值时,一只属于该池的被侵蚀的精灵(corrupted spirit)就会在地图上生成。击败被侵蚀的精灵后,有概率遇到闪光精灵。

然而,地图上同时存在的被侵蚀的精灵数量是有限的。如果生成的太多,旧的被侵蚀的精灵会被新的挤出。

此外,闪光遭遇还有保底机制。每个闪光池都有一个独立的保底计数器。每次击败来自该池的被侵蚀的精灵时,该池的保底计数器就会加一。当一个池的保底计数器达到 80 时,击败来自该池的被侵蚀的精灵将必定触发闪光遭遇。

详细规则如下。

有 $n$ 种普通精灵,$A$ 个家族和 $B$ 个元素。第 $i$ 种普通精灵属于家族 $fa_i$,且具有元素 $el_i$。

有两种类型的闪光池:

  • 家族池 $F_x$:第 $x$ 个家族的闪光池。
  • 元素池 $E_x$:第 $x$ 个元素的闪光池。

每个闪光池 $P$ 维护四个值:

  • $progress_P$:污染进度,初始为 0。
  • $pity_P$:保底计数器,初始为 0。
  • $need_P$:生成一只被侵蚀的精灵所需的普通捕捉次数(一个给定的常数)。
  • $luck_P$:幸运阈值(一个给定的常数)。

地图上最多可以同时存在 $m$ 只被侵蚀的精灵。所有被侵蚀的精灵按生成时间顺序(最旧的在前)排列在一个队列中。如果数量超过 $m$,则从队首移除最旧的被侵蚀的精灵,直到数量最多为 $m$。因地图容量限制而被挤出的被侵蚀的精灵不被视为被击败,且不会影响任何池的保底计数器。

共有 $q$ 次操作,每次操作为以下两种类型之一。

操作 1:普通捕捉

C T x c

tarjen 连续捕捉第 $x$ 种普通精灵 $c$ 次,并将这 $c$ 次捕捉归入某个闪光池。如果 $T = F$,归入家族池 $F_{fa_x}$;如果 $T = E$,归入元素池 $E_{el_x}$。

设归入的池为 $P$。令 $progress_P \mathrel{+}= c$。然后,只要 $progress_P \ge need_P$,就生成一只属于池 $P$ 的被侵蚀的精灵,并令 $progress_P \mathrel{-}= need_P$。

注意,单次捕捉操作可能会生成多只被侵蚀的精灵。

新生成的被侵蚀的精灵按顺序追加到队列的末尾。如果数量超过 $m$,则从队首移除最旧的被侵蚀的精灵。

操作 2:击败被侵蚀的精灵

B k r

tarjen 挑战地图上的第 $k$ 只被侵蚀的精灵(按从旧到新的顺序排序)。

如果地图上的被侵蚀的精灵少于 $k$ 只,输出 MISS 且不发生任何状态改变。

否则,设该被侵蚀的精灵属于池 $P$。将其从地图上移除,并令 $pity_P \mathrel{+}= 1$。

然后进行闪光检测。每个池 $P$ 都有一个幸运阈值 $luck_P$。如果 $r \le luck_P$ 或 $pity_P = 80$,则遇到闪光精灵:输出 SHINY P 并令 $pity_P = 0$。否则,输出 NORMAL P pity_P

输入格式

第一行包含五个整数 $n, A, B, m, q$ ($1 \le n, A, B, m, q \le 2 \times 10^5$) —— 普通精灵种类的数量、家族的数量、元素的数量、地图上被侵蚀的精灵的最大数量,以及操作的数量。

接下来的 $n$ 行,每行包含两个整数 $fa_i, el_i$ ($1 \le fa_i \le A, 1 \le el_i \le B$)。

下一行包含 $A$ 个整数 $need_{F_1}, \dots, need_{F_A}$ ($1 \le need_{F_i} \le 10^9$)。

下一行包含 $B$ 个整数 $need_{E_1}, \dots, need_{E_B}$ ($1 \le need_{E_i} \le 10^9$)。

下一行包含 $A$ 个整数 $luck_{F_1}, \dots, luck_{F_A}$ ($0 \le luck_{F_i} \le 10^9$)。

下一行包含 $B$ 个整数 $luck_{E_1}, \dots, luck_{E_B}$ ($0 \le luck_{E_i} \le 10^9$)。

接下来的 $q$ 行,每行描述一个操作,格式为 C T x c ($T \in \{F, E\}, 1 \le x \le n, 1 \le c \le 10^{18}$) 或 B k r ($1 \le k \le 10^{18}, 1 \le r \le 10^9$)。

输出格式

对于每个 B操作,输出一行。如果地图上的被侵蚀的精灵少于 $k$ 只,输出 MISS。否则,如果遇到了闪光精灵,输出 SHINY F xSHINY E x;如果没有遇到,输出 NORMAL F x pNORMAL E x p,其中 $x$ 是闪光池的索引,$p$ 是该池当前的保底计数器值。

样例

输入格式 1

5 2 2 5 10
1 2
1 1
2 2
1 1
2 2
2 2
2 3
40 5
4 41
C E 5 9
C E 4 5
B 2 608984673
B 4 918347739
B 4 37535012
C E 5 7
B 1 712704464
C F 4 7
B 3 270899745
B 5 363752455

输出格式 1

NORMAL E 2 1
NORMAL E 1 1
MISS
NORMAL E 2 2
NORMAL F 1 1
MISS

输入格式 2

3 2 1 3 8
1 1
1 1
2 1
2 3
2
0 5
10
C F 1 2
C E 2 4
B 2 50
C F 3 6
B 3 3
B 5 1
C F 1 2
B 3 100

输出格式 2

NORMAL E 1 1
SHINY F 2
MISS
NORMAL F 1 1

说明

对于样例 2:

设 $F1$ 表示来自池 $F\ 1$ 的被侵蚀的精灵,$E1$ 表示来自池 $E\ 1$ 的被侵蚀的精灵。

在进行前两次捕捉操作后,地图上的被侵蚀的精灵为 $[F1, E1, E1]$。

执行 B 2 50:击败第 2 只精灵($E1$)。由于 $50 > luck_{E_1} = 10$ 且 $pity = 1 \ne 80$,输出 NORMAL E 1 1

然后捕捉第 3 种精灵并归入家族池,生成 2 只 $F2$。地图容量为 3,因此在挤出后,地图变为 $[E1, F2, F2]$。

执行 B 3 3:击败第 3 只精灵($F2$)。由于 $3 \le luck_{F_2} = 5$,遇到闪光精灵,输出 SHINY F 2

执行 B 5 1:地图上少于 5 只精灵,输出 MISS

最后一次击败的是 $F1$,未遇到闪光精灵,输出 NORMAL F 1 1

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.