luogu#P5819. 【L&K R-03】音游大计算
【L&K R-03】音游大计算
题目描述
小 K 喜欢玩音游,特别是一款叫做 dimou 的音游。dimou 的判定机制是这样的:dimou 是单面(不像某 dy 开头的东西)下落式音游。具体来说,在屏幕底端有一条判定线。一首曲子有若干打击点(即 key,可以看做一条与判定线平行的只有左右宽度的线段),每个 key 会在某个时刻从顶端匀速下落,而玩家需要尽量精准地在每个 key 与判定线重合时点击它。
当然,玩家有可能在 key 接触判定线之前就点击了,也可能在 key 已经落到判定线之下时才点击。这时候,就需要考虑游戏的判定系统,以统计玩家完成一首曲子的情况。dimou 有三种判定:perfect,good 和 miss。总共有六种情况——
情况 :玩家点击的时间在某个 key 下落至其与判定线重合的时间的前 或更多(记为 ,下同),则不会产生任何判定效果(等于无意义点击);
情况 :,则此 key 产生一次 miss 判定并消失;
情况 :,则此 key 产生一次 good 判定并消失;
情况 :(负数代表在 key 到达判定线之后点击),则此 key 产生一次 perfect 判定并消失;
情况 :,则此 key 产生一次 good 判定并消失;
情况 :,则此 key 在点击之前就会落出屏幕,记一次 miss 判定并消失(即在此 key 落于判定线之下 后自己产生一次 miss 判定),点击对此 key 不会产生任何判定效果。
除此之外,dimou 还有最大连击判定(max combo)。一段连击(combo)是指从某一个非 miss 的判定开始,到某一个非 miss 的判定结束(在这段区间内 (按时间顺序) 没有任何 miss 判定),判定的总数量。而 max combo 则指的是所有 combo 的最大值。
除此之外,dimou 还有一些判定规则。一次点击的位置可以看做判定线上的一个点,则过此点作判定线的垂线,只有与此垂线有交点(交点可在端点)的 key 才可能因此次点击产生判定效果。并且, 每次点击只会对可能产生判定效果的 key 中位置(纵向高度)最低(离屏幕顶端最远)的一个产生判定效果。 形象地说,你只有点击某个 key 下方的位置才可能将其消除,并且若两个 key 有上下相对距离地一起下落,那么如果点击可以使下面的 key 消除,则一定不会使上面的 key 消除。特殊地,如果一次点击对两个或以上位置(高度)相同的 key 都可能产生判定效果,且没有更低的可能产生判定效果的 key,则这些 key 都会被消除。
为了把一首曲子打好,小 K 决定背谱,即记住所有 key 的位置和它们下落到判定线的时间。当然,小 K 也会事先决定好自己的打法,即决定在什么时间在什么位置点击。可是小 K 并不会计算自己的打法可以得到的最终成绩。请你帮小 K 算算,他的打法会得到多少 perfect 判定,多少 good 判定,多少 miss 判定,以及 max combo。
注意:小 K 不会在同一时间点击两次或以上。如果同一时间有多个判定,按 miss,good,perfect 的顺序依次处理。
输入格式
第一行两个正整数 ,代表 key 数量与小 K 的点击数。
紧接着 行,每行三个浮点数(小数位数不超过 位),分别表示每个 key 从曲子开始算起到达判定线的时间,其左端点位置,右端点位置。
紧接着 行,每行两个浮点数(小数位数不超过 位),分别表示小 K 每次点击从曲子开始算起的时间和其位置。
输出格式
一行,输出四个非负整数,两两用单个空格隔开,分别代表 perfect 数,good 数,miss 数和 max combo。
5 6
1 0.0 10.0
1.5 0.0 10.0
2.0 0.0 10.0
2.5 0.0 10.0
3.0 0.0 10.0
0.0 5.0
0.4 5.0
1.3 5.0
2.0 5.0
2.7 5.0
3.6 5.0
1 2 2 3
4 2
0.1 0.0 3.0
0.1 2.0 4.0
0.0 3.0 8.0
0.6 1.0 6.0
0.6 6.0
0.0 2.5
3 0 1 2
提示
【样例解释】
对于样例 : 个 key 产生的判定按时间顺序分别为 miss,good,perfect,good,miss。第一次和最后一次点击不产生判定效果。
对于样例 :按时间顺序,第一次点击(),可能产生判定效果的有(按输入顺序)第 个 key。第 个 key 同时到达判定线,第 个 key 比第 个 key 高。因此第一次点击只让第 个 key 产生 perfect 判定。第二次点击(),与其垂线有交点的有第 个 key,但第 个 key 此时已经产生 miss 判定并消失,因此这次点击让第 个 key 产生一次 perfect 判定,此时在同一时间出现了两个判定 perfect,miss,按照规则先处理 miss 再处理 perfect。所以,所有判定按时间顺序分别是 perfect,perfect,miss,perfect。容易发现 miss 把判定序列分成了两段,第一段的 combo 为 ,第二段的 combo 为 ,所以 max combo 为 。
【数据范围】
对于 数据,。
对于另外 数据,,。
对于另外 数据,所有 相等,所有 相等。
对于另外 数据, 在 中随机生成。
对于 数据,,,。