#P6788. 群星陨落

群星陨落

题目描述

自从群星连结之后,Alice 和 Bob 就互相取关了。

但是 Alice 仍然在 ββ 站的首页推荐上刷到了 Bob 的音游视频。

Alice 看了 Bob 的视频之后,对他玩的这款音游非常感兴趣,于是自己也安装了这款音游,走上了进化的不归路······

为了简化题目,我们认为 Alice 的手机屏幕只有 1×11 \times 1 的大小,且开始游玩的时间为 00

概念

分数ss):用于对玩家的游玩过程进行评价的 77 位数字。初始值为 00000000000000,最大值为 10000001000000

评级:由分数推算得到的字符(串)。包括 φ(Phi),ν(V),SABC 以及 False

音符(Note):玩家通过点击(Click)、按住(Hold)或滑动(Slide)(以下统称击打)可以获得分数的对象。

判定线:判定玩家击打音符的时机是否准确的线。

谱面:关卡中的音符与判定线的集合。不同的谱面有不同的难度。为了方便,我们认为音符集合是一个有序的列表(且同一时间可能会出现多个音符,此情况要求按输入的顺序逐个判定每个音符),称之为音符序列。音符序列中的音符会在规定时刻下落到判定线上。

定数dd):评价谱面难度的数字。

定级:定数的整数部分。即 d\lfloor d \rfloor

物量nn):音符的数量。

ACC\text{ACC}:打击精准度。初始值为 0.00%0.00\%,最大值为 100.00%100.00\%

连击数(Combo):统计玩家连续正确击打音符的数字。玩家在成功击打一个音符并获得分数后,如果成功击打音符序列中的下一个音符并获得分数则连击数将会 +1+1

最大连击数cmaxc_{\max}):游玩过程中连击数的最大值。

Ranking ScoreRKS\text{RKS}):评价玩家水平的数字。

其中,音符又分为:

  • Tap只有玩家在音符接触判定线时进行点击Click)才可以获得分数的音符(一旦判定,该点击操作之后将只能判定处于范围内的 Drag);

  • Hold:具有一定长度的,需要玩家在音符底端(HoldBottom)接触判定线时(t1t_1)按下(HoldStart),在音符顶端(HoldTop)接触判定线时(t2t_2)松开(HoldEnd)以获得分数的音符;

  • Flick只有玩家在音符接触判定线时进行滑动Slide)才可以获得分数的音符(一旦判定,该滑动操作之后将只能判定处于范围内的 Drag);

  • Drag:只需玩家在音符接触判定线时存在操作即可获得分数的音符(例如:在音符接触判定线之前按下、在音符接触判定线之后松开也可以获得分数)。

分数又分为:

  • 判定分s1s_1):玩家在游玩时通过击打音符获得的分数。最大值为 900000900000

  • 连击分s2s_2):玩家在击打一个音符获得判定分后,因成功击打音符序列中的下一个音符而额外获得的分数。最大值为 100000100000

判定

对于每个 Tap 音符来说,都有 Perfect\text{Perfect}Good\text{Good}Bad\text{Bad}Miss\text{Miss} 四种判定。其中一些判定会将连击数归零。设音符(底端)接触到判定线的时间与玩家进行操作的时间差为 tt

Perfect\text{Perfect}: 在音符到达判定线时做出相应动作,tt 满足 80mst+80ms-80\text{ms} \le t \le +80\text{ms}

Good\text{Good}: 击打偏早(Early\text{Early})或过晚击打(Late\text{Late}),tt 满足 80ms<t160ms80\text{ms} < |t| \le 160\text{ms}

Bad\text{Bad}: 过早击打,tt 满足 +160ms<t+240ms+160\text{ms} < t \le +240\text{ms}。连击数归零。

Miss\text{Miss}: 未能在音符到达判定线时做出相应动作。连击数归零。

对于 FlickDrag 音符,Good\text{Good}Bad\text{Bad} 的判定范围都合并到了 Perfect\text{Perfect} 中,即只存在 Perfect\text{Perfect}Miss\text{Miss} 这两种判定。基于此,设音符接触判定线的时刻为 tNotet_\text{Note},设 Alice 对音符进行击打操作的时刻为 tOperationt_\text{Operation},我们规定,判定这两种音符为 Perfect\text{Perfect} 的时刻为 max(tNote,tOperation)\max(t_\text{Note},t_\text{Operation})

对于 Hold 音符,Bad\text{Bad} 的判定范围合并到了 Miss\text{Miss} 中,即只存在 Perfect\text{Perfect}Good\text{Good}Miss\text{Miss} 这三种判定。此外,若玩家成功取得 Perfect\text{Perfect}Good\text{Good} 判定后,在区间 (t1,t2500ms)(t_1, t_2 - 500ms) 内松开,则此音符的判定改为 Miss\text{Miss} 判定。因此,连击数将只能在 t2500mst_2 - 500ms 这一时刻或玩家取得 Miss\text{Miss} 判定时更新。

对于所有种类的音符,只要在 t160ms|t| \le 160\text{ms} 内没有被判定,连击数就会归零。

设所有判定为 Perfect\text{Perfect} 的音符的数量为 nPn_P,所有判定为 Good\text{Good} 的音符的数量为 nGn_G(其中,所有击打偏早的音符的数量为 nGEn_{GE},所有过晚击打的音符的数量为 nGLn_{GL}),所有判定为 Bad\text{Bad} 的音符的数量为 nBn_B,所有判定为 Miss\text{Miss} 的音符的数量为 nMn_M

为了方便,我们规定:在游玩过程中,若全部音符都被判定为 Perfect\text{Perfect},称本次游玩是 AP\text{AP}(All Perfect)的;若连击数等于物量,则称本次游玩是 FC\text{FC}(Full Combo)的。

结算

分数的结算:

$$s_1 = 900000 \times \frac{n_P + n_G \times 65\%}{n} $$s2=100000×cmaxns_2 = 100000 \times \frac{c_{\max}}{n} s=s1+s2s = s_1 + s_2

评级的结算:

评级 分数要求
φ(Phi s=1000000s=1000000
ν(V s[960000,1000000)s \in [960000,1000000)
S s[920000,960000)s \in [920000,960000)
A s[880000,920000)s \in [880000,920000)
B s[820000,880000)s \in [820000,880000)
C s[700000,820000)s \in [700000,820000)
False s[0,700000)s \in [0,700000)

ACC\text{ACC} 的结算:

$$\text{ACC} = \frac{n_P + n_G \times 65\%}{n} \times 100\% $$

RKS\text{RKS} 的结算:

$$\begin{equation} \text{RKS}= \begin{cases} 0& \text{$(\text{ACC} < 70\%),$} \\ (\frac{\text{ACC} \times 100 - 55}{45})^2 \times d& \text{$(\text{ACC} \ge 70\%)$} \end{cases} \end{equation} $$

要求

给定一张谱面,给出 Alice 的游玩过程,结算出本次游玩每种判定的数量,本次游玩的分数,评级,最大连击数,ACC\text{ACC} 以及 RKS\text{RKS}。如果本次游玩是 AP\text{AP}FC\text{FC} 的,则要将其在评级后标出。

输入格式

11 行一个实数和两个整数,分别表示定数 dd,音符(部位)数量 nn^{\prime} 和 Alice 的操作数量 mm

接下来的 nn^{\prime} 行,每行一个字符串和一个整数,分别表示音符的种类(或部位)和接触判定线的时间(单位:毫秒)。

接下来的 mm 行,每行一个字符串和一个整数,分别表示 Alice 进行的击打操作种类和操作的时间(单位:毫秒)。

如果谱面是真实存在的,则存在第 n+m+2n^{\prime} + m + 2 行,两个字符串分别表示歌曲名和难度信息。

输入保证所有音符(部位)均按接触判定线的时间的非降序输入,并且不会出现多个 Hold 音符重叠的情况。

输出格式

11 行六个整数,分别表示 nPn_PnGn_GnBn_BnMn_MnGEn_{GE}nGLn_{GL}

22 行一个 77 位整数和一个(或多个)字符(串),分别表示 Alice 获得的分数以及获得的评级(注意,为了避免编码问题,若 s=1000000s = 1000000 则输出 Phi;若 s[960000,1000000)s \in [960000,1000000) 则输出 V)。如果本次游玩是 AP\text{AP}FC\text{FC} 的,则一并输出 AP\text{AP}FC\text{FC}

33 行一个整数和两个实数,分别表示 cmaxc_{\max}ACC\text{ACC}RKS\text{RKS}。其中,ACC\text{ACC} 是百分数。两个实数均四舍五入保留小数点后两位数字

2.6 10 9
Tap 160
HoldBottom 480
Drag 1200
Flick 1600
HoldTop 3200
Tap 3500
Drag 3800
HoldBottom 4000
Tap 4800
HoldTop 5400
Click 140
HoldStart 390
HoldEnd 1400
Slide 1500
Click 3600
Slide 3700
HoldStart 3900
Click 4600
HoldEnd 5000
4 2 1 1 1 1
0633750 False
3 66.25% 0.00
18.6 15 9
Tap 84
Drag 233
HoldBottom 645
Drag 1145
HoldTop 1405
HoldBottom 1982
Drag 2022
Flick 2740
Tap 3000
Tap 3200
Tap 3800
Drag 4328
HoldTop 4532
Tap 4954
Drag 114514
Click 4
HoldStart 805
HoldEnd 905
HoldStart 1782
Slide 2500
Click 2920
Click 3360
Click 3640
Click 4714
8 3 1 1 1 2
0727307 C
5 76.54% 4.26

数据范围与提示

对于 25%25\% 的数据,满足 n,m2500,d17.0n^{\prime}, m \le 2500, d \le 17.0,且最大的时间不超过 202888ms202888\text{ms}

对于 100%100\% 的数据,满足 0<n,m105,0<d<1030 < n^{\prime}, m \le 10^5, 0 < d < 10^3,且所有时间均处于区间 (0,231ms)(0, 2^{31}\text{ms}) 内。