U179736 群星陨落

题目背景

自从[群星连结](https://www.luogu.com.cn/problem/P7610)之后,Alice 和 Bob 就互相取关了。 但是 Alice 仍然在 $β$ 站的首页推荐上刷到了 Bob 的音游视频。 Alice 看了 Bob 的视频之后,对他玩的这款音游非常感兴趣,于是自己也安装了这款音游,走上了进化的不归路······

题目描述

为了简化题目,我们认为 Alice 的手机屏幕只有 $1 \times 1$ 的大小,且开始游玩的时间为 $0$。 ### 概念 **分数**($s$):用于对玩家的游玩过程进行评价的 $7$ 位数字。初始值为 $0000000$,最大值为 $1000000$。 **评级**:由分数推算得到的字符(串)。包括 φ(**Phi**),ν(**V**),**S**,**A**,**B**,**C** 以及 **False**。 **音符**(Note):玩家通过点击(**Click**)、按住(Hold)或滑动(**Slide**)(以下统称击打)可以获得分数的对象。 **判定线**:判定玩家击打音符的时机是否准确的线。 **谱面**:关卡中的音符与判定线的集合。不同的谱面有不同的难度。为了方便,我们认为音符集合是一个有序的列表(**且同一时间可能会出现多个音符**,此情况要求**按输入的顺序逐个判定每个音符**),称之为**音符序列**。音符序列中的音符会在规定时刻下落到判定线上。 **定数**($d$):评价谱面难度的数字。 **定级**:定数的整数部分。即 $\lfloor d \rfloor$。 **物量**($n$):音符的数量。 **$\text{ACC}$**:打击精准度。初始值为 $0.00\%$,最大值为 $100.00\%$。 **连击数**(Combo):统计玩家连续正确击打音符的数字。玩家在成功击打一个音符并获得分数后,如果成功击打音符序列中的下一个音符并获得分数则连击数将会 $+1$。 **最大连击数**($c_{\max}$):游玩过程中连击数的最大值。 **Ranking Score**($\text{RKS}$):评价玩家水平的数字。 其中,音符又分为: - **Tap**:**只有**玩家在音符接触判定线时进行**点击**(**Click**)才可以获得分数的音符(一旦判定,该点击操作之后将只能判定处于范围内的 **Drag**); - **Hold**:具有一定长度的,需要玩家在音符底端(**HoldBottom**)接触判定线时($t_1$)按下(**HoldStart**),在音符顶端(**HoldTop**)接触判定线时($t_2$)松开(**HoldEnd**)以获得分数的音符; - **Flick**:**只有**玩家在音符接触判定线时进行**滑动**(**Slide**)才可以获得分数的音符(一旦判定,该滑动操作之后将只能判定处于范围内的 **Drag**); - **Drag**:只需玩家在音符接触判定线时存在操作即可获得分数的音符(例如:在音符接触判定线之前按下、在音符接触判定线之后松开也可以获得分数)。 分数又分为: - **判定分**($s_1$):玩家在游玩时通过击打音符获得的分数。最大值为 $900000$; - **连击分**($s_2$):玩家在击打一个音符获得判定分后,因成功击打音符序列中的下一个音符而额外获得的分数。最大值为 $100000$。 ### 判定 对于每个 **Tap** 音符来说,都有 $\text{Perfect}$,$\text{Good}$,$\text{Bad}$,$\text{Miss}$ 四种判定。其中一些判定会将连击数归零。设音符(底端)接触到判定线的时间与玩家进行操作的时间差为 $t$。 **$\text{Perfect}$**: 在音符到达判定线时做出相应动作,$t$ 满足 $-80\text{ms} \le t \le +80\text{ms}$。 **$\text{Good}$**: 击打偏早($\text{Early}$)或过晚击打($\text{Late}$),$t$ 满足 $80\text{ms} < |t| \le 160\text{ms}$。 **$\text{Bad}$**: 过早击打,$t$ 满足 $+160\text{ms} < t \le +240\text{ms}$。连击数归零。 **$\text{Miss}$**: 未能在音符到达判定线时做出相应动作。连击数归零。 对于 **Flick** 和 **Drag** 音符,$\text{Good}$ 与 $\text{Bad}$ 的判定范围都合并到了 $\text{Perfect}$ 中,即只存在 $\text{Perfect}$ 和 $\text{Miss}$ 这两种判定。基于此,设音符接触判定线的时刻为 $t_\text{Note}$,设 Alice 对音符进行击打操作的时刻为 $t_\text{Operation}$,我们规定,判定这两种音符为 $\text{Perfect}$ 的时刻为 $\max(t_\text{Note},t_\text{Operation})$。 对于 **Hold** 音符,$\text{Bad}$ 的判定范围合并到了 $\text{Miss}$ 中,即只存在 $\text{Perfect}$,$\text{Good}$ 和 $\text{Miss}$ 这三种判定。此外,若玩家成功取得 $\text{Perfect}$ 或 $\text{Good}$ 判定后,在区间 $(t_1, t_2 - 500ms)$ 内松开,则此音符的判定改为 $\text{Miss}$ 判定。因此,连击数将只能在 $t_2 - 500ms$ 这一时刻或玩家取得 $\text{Miss}$ 判定时更新。 对于所有种类的音符,只要在 $|t| \le 160\text{ms}$ 内没有被判定,连击数就会归零。 设所有判定为 $\text{Perfect}$ 的音符的数量为 $n_P$,所有判定为 $\text{Good}$ 的音符的数量为 $n_G$(其中,所有击打偏早的音符的数量为 $n_{GE}$,所有过晚击打的音符的数量为 $n_{GL}$),所有判定为 $\text{Bad}$ 的音符的数量为 $n_B$,所有判定为 $\text{Miss}$ 的音符的数量为 $n_M$。 为了方便,我们规定:在游玩过程中,若全部音符都被判定为 $\text{Perfect}$,称本次游玩是 $\text{AP}$(All Perfect)的;若连击数等于物量,则称本次游玩是 $\text{FC}$(Full Combo)的。 ### 结算 分数的结算: $$s_1 = 900000 \times \frac{n_P + n_G \times 65\%}{n}$$ $$s_2 = 100000 \times \frac{c_{\max}}{n}$$ $$s = s_1 + s_2$$ 评级的结算: |评级|分数要求| |:-:|:-:| |φ(**Phi**)|$s=1000000$| |ν(**V**)|$s \in [960000,1000000)$| |**S**|$s \in [920000,960000)$| |**A**|$s \in [880000,920000)$| |**B**|$s \in [820000,880000)$| |**C**|$s \in [700000,820000)$| |**False**|$s \in [0,700000)$| $\text{ACC}$ 的结算: $$ \text{ACC} = \frac{n_P + n_G \times 65\%}{n} \times 100\% $$ $\text{RKS}$ 的结算: ![](https://cdn.luogu.com.cn/upload/image_hosting/kvznw3qp.png) ### 要求 给定一张谱面,给出 Alice 的游玩过程,结算出本次游玩每种判定的数量,本次游玩的分数,评级,最大连击数,$\text{ACC}$ 以及 $\text{RKS}$。如果本次游玩是 $\text{AP}$ 或 $\text{FC}$ 的,则要将其在评级后标出。

输入格式

第 $1$ 行一个实数和两个整数,分别表示定数 $d$,音符(部位)数量 $n^{\prime}$ 和 Alice 的操作数量 $m$。 接下来的 $n^{\prime}$ 行,每行一个字符串和一个整数,分别表示音符的种类(或部位)和接触判定线的时间(单位:毫秒)。 接下来的 $m$ 行,每行一个字符串和一个整数,分别表示 Alice 进行的击打操作种类和操作的时间(单位:毫秒)。 如果谱面是真实存在的,则存在第 $n^{\prime} + m + 2$ 行,两个字符串分别表示歌曲名和难度信息。 输入保证所有音符(部位)均按接触判定线的时间的非降序输入,并且不会出现多个 **Hold** 音符重叠的情况。

输出格式

第 $1$ 行六个整数,分别表示 $n_P$,$n_G$,$n_B$,$n_M$,$n_{GE}$,$n_{GL}$。 第 $2$ 行一个 $7$ 位整数和一个(或多个)字符(串),分别表示 Alice 获得的分数以及获得的评级(注意,为了避免编码问题,若 $s = 1000000$ 则输出 **`Phi`**;若 $s \in [960000,1000000)$ 则输出 **`V`**)。如果本次游玩是 $\text{AP}$ 或 $\text{FC}$ 的,则一并输出 $\text{AP}$ 或 $\text{FC}$。 第 $3$ 行一个整数和两个实数,分别表示 $c_{\max}$,$\text{ACC}$ 和 $\text{RKS}$。其中,$\text{ACC}$ 是百分数。两个实数均**四舍五入保留小数点后两位数字**。

说明/提示

#### 样例 1 解释 物量 $n=8$,定级为 $2$。 第 $1$ 个音符为 **Tap**,点击时间提前 $20\text{ms}$,判定为 $\text{Perfect}$,连击数 $+1$,目前连击数为 $1$。 第 $2$ 个音符为 **Hold**,按下时间提前 $90\text{ms}$,暂时判定为 $\text{Good}$ 中的 $\text{Early}$。 第 $3$ 个音符为 **Drag**,在接触判定线之前存在按下操作,判定为 $\text{Perfect}$,连击数 $+1$,目前连击数为 $2$。 第 $3$ 个操作为松开,时间处于第 $2$ 个音符 **Hold** 判定为 $\text{Miss}$ 的区间 $(480\text{ms}, 2700\text{ms})$ 内,第 $2$ 个音符 **Hold** 判定为 $\text{Miss}$,连击数归零。 第 $4$ 个音符为 **Flick**,滑动时间提前 $100\text{ms}$,判定为 $\text{Perfect}$,连击数 $+1$,目前连击数为 $1$。 第 $5$ 个音符为 **Tap**,点击时间滞后 $100\text{ms}$,判定为 $\text{Good}$ 中的 $\text{Late}$,连击数 $+1$,目前连击数为 $2$。 第 $6$ 个音符为 **Drag**,在接触判定线之前存在滑动操作,判定为 $\text{Perfect}$,连击数 $+1$,目前连击数为 $3$。 第 $7$ 个音符为 **Hold**,按下时间提前 $100\text{ms}$,暂时判定为 $\text{Good}$ 中的 $\text{Early}$。 第 $8$ 个音符为 **Tap**,点击时间提前 $200\text{ms}$,判定为 $\text{Bad}$,连击数归零。 第 $9$ 个操作为松开,时间处于第 $7$ 个音符 **Hold** 判定为 $\text{Miss}$ 的区间 $(4000\text{ms}, 4900\text{ms})$ 外,第 $7$ 个音符 **Hold** 判定为 $\text{Good}$ 中的 $\text{Early}$,连击数 $+1$,目前连击数为 $1$。 上述过程中,最大连击数为 $3$。则有 $s_1 = 596250$,$s_2 = 37500$,因此 $s = s_1 + s_2 = 633750$。求得 $\text{RKS}$ 为 $0.1625$,但因 $\text{ACC} < 70\%$,$\text{RKS}$ 被归为 $0.00$。 #### 样例 2 提示 各个音符的判定情况如下:(`T` = **Tap**,`F` = **Flick**,`H` = **Hold**,`D` = **Drag**,每行以“Note 音符编号 (音符类型): 判定类型 $t$ 音符接触判定线的时间 判定时间 连击数”的格式给出) ``` Note 1 (T): Perfect 80ms 84ms 4ms 1 Note 2 (D): Perfect 229ms 233ms 233ms 2 Note 3 (H): Late -160ms 645ms 905ms 3 Note 4 (D): Perfect 0ms 1145ms 1145ms 4 Note 5 (D): Perfect 0ms 2022ms 2022ms 5 Note 6 (H): Miss 0ms 1982ms 2142ms 0 Note 7 (F): Perfect 240ms 2740ms 2740ms 1 Note 8 (T): Perfect 80ms 3000ms 2920ms 2 Note 9 (T): Late -160ms 3200ms 3360ms 3 Note 10 (T): Early 160ms 3800ms 3640ms 4 Note 11 (D): Perfect 0ms 4328ms 4328ms 5 Note 12 (T): Bad 240ms 4954ms 4714ms 0 Note 13 (D): Perfect 0ms 114514ms 114514ms 1 ``` ### 数据范围与约定 对于 $25\%$ 的数据,满足 $n^{\prime}, m \le 2500, d \le 17.0$,且最大的时间不超过 $202888\text{ms}$。 对于 $100\%$ 的数据,满足 $0 < n^{\prime}, m \le 10^5, 0 < d < 10^3$,且所有时间均处于区间 $(0, 2^{31}\text{ms})$ 内。