#P7506. 「Wdsr-2.5」琪露诺的算数游戏

「Wdsr-2.5」琪露诺的算数游戏

题目描述

游戏概况

《琪露诺的算数游戏》(诨名“⑨牌”),是一款轻松快乐的多玩家卡牌回合制游戏。

注意:这里的规则与市面上的⑨牌规则不尽相同。由于⑨牌种类太多不大容易处理,所以这里的规则更类似于 NEU\text{NEU} 游戏。

游戏中有 nn 名玩家,围成一圈。一共会进行 mm 轮。每个玩家初始时有 33 张手牌。游戏有一个 kk 张牌的牌堆。在本题中,你可以认为不会出现牌堆抽完的情况(真的)。此外,根据该题给出的规则,你不需要考虑选手手牌的顺序。

为了简述游戏规则,你可以认为每一轮游戏中有一个整型变量(类似于 int\text{int} 类型寄存器) pp 。玩家打出的牌本质上是对 pp 进行操作。

:请注意下文中“局”、“轮”、“回合”的关系。本题你只会进行一局游戏,每局有 mm 轮,每一轮会有若干回合,每一回合会有一名玩家出牌。

每一轮开始时,pp 会被初始化为 00 ,然后从初始玩家开始,按照顺时针顺序1,2,3,n1,n,1,2,1,2,3,\cdots n-1,n,1,2,\cdots ,逆时针同理),依次出牌。如果这是第一轮,那么初始玩家就是 11 号玩家。当某个玩家出完某张牌后,如果此时 p>99p> 99 ,视作该玩家成为该局的失败者;否则她就会立刻从牌堆顶部取出一张牌并进入到下一回合。失败者会丢失手上其余的两张牌,并从牌堆顶部依次摸三张牌放入自己的手牌中。同时,失败者会成为下一轮初始玩家。在一局游戏当中,牌堆里的牌只减不增。被使用的牌不会回到牌堆当中。

下面介绍该魔改版游戏的牌型。

基本牌

基本牌可以分为五类:加法牌、减法牌、乘法牌、除法牌、固定牌。

  • 加法牌,一共有 77 种: A1,A2,A5,A9,A19,A49,A99A_{1},A_{2},A_{5},A_{9},A_{19},A_{49},A_{99} 。其中, AxA_x 的作用效果是,使 pp 加上牌面上的数字。即 pp+xp\gets p+x
  • 减法牌,一共有 33 种: B1,B9,B19B_{1},B_{9},B_{19} 。作用效果与加法牌类似,只不过会使 pp 减去牌面上的数字。
  • 乘法牌,一共只有 11 种: C2C_2 。它的作用效果是令 pp 乘上对应的数字,即 pp×xp\gets p\times x
  • 除法牌,同样只有 11 种: D2D_2 。会令 pp 除以对应的数字,向下取整。即 pp÷xp\gets \lfloor p\div x\rfloor
  • 固定牌,一共有 33 种: E0,E49,E99E_{0},E_{49},E_{99} ,会将 pp 直接设置为牌面上的数字。

解牌

解牌是可以使一名玩家跳过该回合,并附加一些特殊效果的一类牌。

  • PASS\tt{PASS} ,跳过你,转到下一个玩家。
  • TURN\tt{TURN} ,跳过你,出牌顺序反转(顺时针变为逆时针,逆时针变为顺时针。在下一轮游戏开始时会重置为顺时针)。
  • DOUBLE\tt{DOUBLE} ,跳过你,然后给下一名玩家施加 "DOUBLE"\verb!"DOUBLE"! 效果,也即要出两张牌(先打一摸一,再打一摸一,需要保持全程总数不超过 9999 才能保证不失败)。

DOUBLE\tt{DOUBLE} 效果的一些说明:如果你被施加了 DOUBLE\tt{DOUBLE} 的效果,但是你第一张出了解牌(三种解牌都可以),那么你就会立即解除 DOUBLE\tt{DOUBLE} 效果,跳过这一回合,并且将效果转移到下一名玩家DOUBLE\tt{DOUBLE} 效果不能叠加。


在输入文件中,卡牌名会形如 A1 A99 D2 PASS DOUBLE\colorbox{#f0f0f0}\verb!A1 A99 D2 PASS DOUBLE! 等等。

策略

这一部分将会讲述本题中所有玩家的运行逻辑。

如果无论怎么出都会失败,那么玩家就会随便打出一张牌并成为失败者(显然,打出哪张牌不会对游戏结局产生实质上的影响)。否则会有两种情形:

  1. 如果此时没有被施加 DOUBLE\tt{DOUBLE} 效果:
    • 每名玩家会优先考虑普通牌,并且选择在不成为失败者的前提下使 pp 变得尽可能大的那种方案(如果有多种方案可以使得 pp 最大,那就会按照乘法牌、加法牌、减法牌、除法牌、固定牌的顺序优先选择。显然,同一类普通牌中的不同种类的牌不会使 pp 产生相同的值)。
    • 如果没有普通牌,或者出牌后会成为失败者,那么就考虑使用解牌。玩家会依次考虑手头是否有 PASS,TURN,DOUBLE\tt{PASS,TURN,DOUBLE} 牌。如果有,就打出这张牌。
  2. 如果被施加了 DOUBLE\tt{DOUBLE} 效果:
    • 优先考虑使用解牌。依次考虑PASS,TURN,DOUBLE\tt{PASS,TURN,DOUBLE} 。如果有,就打出这张牌。
    • 否则,选择在不成为失败者的前提下使 pp 变得尽可能小的那种方案(如果有多种方案可以使得 pp 最小,那就会按照除法牌、减法牌、加法牌、乘法牌、固定牌的顺序优先选择)。此时玩家会被解除 DOUBLE\tt{DOUBLE} 状态,于是她会按照情形 11 来决策。

输入格式

第一行三个正整数 n,m,kn,m,k ,含义如题面所示。

接下来 nn 行,每行四个字符串 name,card1,card2,card3name,card_1,card_2,card_3 ,表示这名玩家的名称以及她的三张手牌。玩家名称仅由大小写英文字母组成,不包含空格,长度不超过 2020

接下来一行, kk 个字符串,按照从上至下的顺序描述牌堆里的牌。

详情可以参考输入样例。

输出格式

当新的一轮开始时,你需要输出: Round XXX:\colorbox{f0f0f0}\verb!Round XXX:! (其中,XXX\verb!XXX! 表示这是第多少轮)。

每名玩家出牌时,如果她不是失败者,你需要输出: XXX used YYY,now p=ZZZ.\colorbox{f0f0f0}\verb!XXX used YYY,now p=ZZZ.! (其中,XXX\verb!XXX! 是玩家名; YYY\verb!YYY! 是卡牌名; ZZZ\verb!ZZZ! 是当前 pp 的值)。

否则,当一名玩家成为失败者时,该轮结束。你要输出:XXX lost the game.\colorbox{f0f0f0}\verb!XXX lost the game.! (其中,XXX\verb!XXX! 是玩家名)。

详情可以参考输出样例。

2 1 10
JoesSR B9 A99 PASS
Cirno C2 D2 A49
E49 DOUBLE PASS A19 A49 A99 A99 A99 A99 A99  
Round 1:
JoesSR used A99,now p=99.
Cirno used D2,now p=49.
JoesSR used E49,now p=49.
Cirno used C2,now p=98.
JoesSR used B9,now p=89.
Cirno used DOUBLE,now p=89.
JoesSR used PASS,now p=89.
Cirno lost the game.
3 2 25
Cirno A9 A19 B1
Reimu TURN A9 C2
Marisa DOUBLE D2 D2
A9 B9 C2 PASS PASS A9 A1 A99 A99 A99 A99 A99 A99 A99 A99 A99 A99 A99 A99 A99 A99 A99 A99 A99 A99

Round 1:
Cirno used A19,now p=19.
Reimu used C2,now p=38.
Marisa used D2,now p=19.
Cirno used A9,now p=28.
Reimu used A9,now p=37.
Marisa used C2,now p=74.
Cirno used A9,now p=83.
Reimu used B9,now p=74.
Marisa used A9,now p=83.
Cirno used A1,now p=84.
Reimu used PASS,now p=84.
Marisa used D2,now p=42.
Cirno used B1,now p=41.
Reimu used TURN,now p=41.
Cirno used PASS,now p=41.
Marisa used DOUBLE,now p=41.
Reimu lost the game.
Round 2:
Reimu used A99,now p=99.
Marisa lost the game.

提示

样例 1 说明

牌的使用情况都在输出样例中。这里仅说明每出一张牌后每名玩家当前手牌的情况。具体为什么要使用某张牌,可以参考题目描述。

$$\def{\c}#1{\texttt{#1}} \def\arraystretch{1.5} \begin{matrix} \begin{gathered} \textbf{\textsf{初始}}\cr \begin{array}{|c|c|c|c|} \hline \textbf{玩家名} & \textbf{手牌 1} & \textbf{手牌 2} & \textbf{手牌 3} \cr\hline \text{JoesSR} & \c{B9} & \c{A99} & \c{PASS} \cr\hline \text{Cirno} & \c{C2} & \c{D2} & \c{A49} \cr\hline \end{array}\cr[10pt] \textbf{\textsf{第一回合}}\quad (p: 0\to 99)\cr \begin{array}{|c|c|c|c|} \hline \textbf{玩家名} & \textbf{手牌 1} & \textbf{手牌 2} & \textbf{手牌 3} \cr\hline \text{JoesSR} & \c{B9} & \c{E49} & \c{PASS} \cr\hline \text{Cirno} & \c{C2} & \c{D2} & \c{A49} \cr\hline \end{array}\cr[10pt] \textbf{\textsf{第二回合}}\quad (p:99\to 49)\cr \begin{array}{|c|c|c|c|} \hline \textbf{玩家名} & \textbf{手牌 1} & \textbf{手牌 2} & \textbf{手牌 3} \cr\hline \text{JoesSR} & \c{B9} & \c{E49} & \c{PASS} \cr\hline \text{Cirno} & \c{C2} & \c{DOUBLE} & \c{A49} \cr\hline \end{array}\cr[10pt] \textbf{\textsf{第三回合}}\quad (p:49\to 49)\cr \begin{array}{|c|c|c|c|} \hline \textbf{玩家名} & \textbf{手牌 1} & \textbf{手牌 2} & \textbf{手牌 3} \cr\hline \text{JoesSR} & \c{B9} & \c{PASS} & \c{PASS} \cr\hline \text{Cirno} & \c{C2} & \c{DOUBLE} & \c{A49} \cr\hline \end{array}\cr[10pt] \end{gathered} & \begin{gathered} \textbf{\textsf{第四回合}}\quad (p:49\to 98)\cr \begin{array}{|c|c|c|c|} \hline \textbf{玩家名} & \textbf{手牌 1} & \textbf{手牌 2} & \textbf{手牌 3} \cr\hline \text{JoesSR} & \c{B9} & \c{PASS} & \c{PASS} \cr\hline \text{Cirno} & \c{A19} & \c{DOUBLE} & \c{A49} \cr\hline \end{array}\cr[10pt] \textbf{\textsf{第五回合}}\quad (p:98\to 89)\cr \begin{array}{|c|c|c|c|} \hline \textbf{玩家名} & \textbf{手牌 1} & \textbf{手牌 2} & \textbf{手牌 3} \cr\hline \text{JoesSR} & \c{A49} & \c{PASS} & \c{PASS} \cr\hline \text{Cirno} & \c{A19} & \c{DOUBLE} & \c{A49} \cr\hline \end{array}\cr[10pt] \textbf{\textsf{第六回合}}\quad (p:89\to 89)\cr \begin{array}{|c|c|c|c|} \hline \textbf{玩家名} & \textbf{手牌 1} & \textbf{手牌 2} & \textbf{手牌 3} \cr\hline \text{JoesSR} & \c{A49} & \c{PASS} & \c{PASS} \cr\hline \text{Cirno} & \c{A19} & \c{A99} & \c{A49} \cr\hline \end{array}\cr[10pt] \textbf{\textsf{第七回合}}\quad (p:89\to 89)\cr \begin{array}{|c|c|c|c|} \hline \textbf{玩家名} & \textbf{手牌 1} & \textbf{手牌 2} & \textbf{手牌 3} \cr\hline \text{JoesSR} & \c{A49} & \c{A99} & \c{PASS} \cr\hline \text{Cirno} & \c{A19} & \c{A99} & \c{A49} \cr\hline \end{array}\cr[10pt] \end{gathered} \end{matrix} $$

:初始回合以及第 2,4,62,4,6 回合都是 JoesSR\text{JoesSR} 出牌;第 1,3,5,71,3,5,7 回合都是琪露诺出牌。值得注意的是,尽管第 55 回合琪露诺使用了 DOUBLE\tt{DOUBLE} ,但因为下一回合被 PASS\tt{PASS} 了,所以第 77 回合仍然是琪露诺出牌。

此时琪露诺无论如何都会失败,于是琪露诺成为了失败者。

样例 3

见下发附件。

数据规模与约定

  • 对于 30%30\% 的数据,仅包含普通牌,并且 n3n\le 3
  • 对于另外 15%15\% 的数据,不包含 TURN\tt{TURN} 牌和 PASS\tt{PASS} 牌。
  • 对于另外 15%15\% 的数据,不包含 DOUBLE\tt{DOUBLE} 牌。
  • 对于 100%100\% 的数据, 满足 1n30;1m100;1k3×1051\le n\le 30;1\le m\le 100;1\le k\le 3\times 10^5 。保证任何时候 p<104|p|<10^4

参考资料

【东方桌游考古】NEU,“⑨牌”,与十年前的同人