题目描述
> 你还记得“浙江师范大学第十七届大学生程序设计竞赛”的 $G$ 题【UNO】吗?你需要按照题意去模拟每位玩家的出牌过程,并给出每位玩家最后的手牌分数,还要指认出谁是最后的赢家。
>
> 或许你记得,或许你忘了,又或许你根本没有看过这道题,这都不重要。这一题,$SY$ 写了整整一天两夜,期间换了三种以上的写法,让年幼的 $SY$ 双目失神,瘫痪在床,怀疑人生。
>
> 啊好吧这都没有什么关系,因为你这么强,肯定不会像 $SY$ 一样自闭的啦。加油啦!
今天 $SY$ 带来的是一套名为《带富翁》的棋牌游戏!如果你没有玩过原版,没有关系,$SY$ 正打算手把手教你玩呢;如果你玩过原版,也没有关系,$SY$ 为你悉心魔改了绝大部分玩法,希望能够玩得开心哟~
**第一部分——游玩规则:**
本游戏共有 $4$ 名玩家,分别编号为 $1, 2, 3, 4$,各玩家按顺序轮流进行游戏。每位玩家初始时拥有 $300$ 元现金。
地图中共有 $64$ 个位置,位置两两相邻且首位对接,形成一条单向环路,位置 $i\ (i\lt 64)$ 的下一个位置是位置 $i+1$,位置 $64$ 的下一个位置是位置 $1$。
每位玩家每次操作时会获得一个“行进点数”(替代原游戏中掷骰子决定步数的玩法),获得多少点就走多少步。每回合从 $1$ 号玩家开始,获得“行进点数”并一步步走到目的地后,$2$ 号玩家再去获得“行进点数”并行走,然后依次是 $3$ 号,$4$ 号。$4$ 位玩家都执行一遍操作后才算一回合结束(如果某玩家被 Delay 了也算是操作过,Delay 会在下文提及)。
【例 $1$】假设玩家当前位于位置 $1$,且获得“行进点数”为 $3$,则该回合玩家会从位置 $1$ 开始,按顺序走到位置 $2$,位置 $3$,直到位置 $4$ 停下;
【例 $2$】假设玩家当前位于位置 $64$,且获得“行进点数”为 $2$,则该回合玩家会从位置 $64$ 走到位置 $1$,再到位置 $2$ 停下。
对于“行进点数”,会以序列的方式给定。系统会给定一个长度为 $m$ 的序列 $a_1,a_2,a_3,\cdots,a_m$,游戏开始时 $1$ 号玩家拿取 $a_1$ 作为其“行进点数”,其后每位玩家按顺序拿取 $a_2,a_3,\cdots$ 来作为自己的“行进点数”,直到 $a_m$ 被拿取后,下一位玩家从 $a_1$ 开始重新进行拿取。
【例 $1$】假设序列长度 $m=5$,则从游戏开始时看起,$1$ 号玩家拿 $a_1$,$2$ 号玩家拿 $a_2$,$3$ 号玩家拿 $a_3$,$4$ 号玩家拿 $a_4$,$1$ 号玩家拿 $a_5$,$2$ 号玩家拿 $a_1$,如此进行下去。
【例 $2$】假设序列长度 $m=3$,则从游戏开始时看起,$1$ 号玩家拿 $a_1$,$2$ 号玩家拿 $a_2$,$3$ 号玩家拿 $a_3$,$4$ 号玩家拿 $a_1$,$1$ 号玩家拿 $a_2$,$2$ 号玩家拿 $a_3$,如此进行下去。
**第二部分——地图规则:**
游戏地图中的 $64$ 个位置都可能具有一些特殊的功能。以下是对各种功能的解释:
- $N$:None,无功能,玩家走过此地时什么也不会发生。
- $B$:Bonus,奖励位置,玩家该回合操作结束时如果在该位置停下,会获得 $50$ 元现金的奖励(由系统给予)。
- $P$:Punishment,惩罚位置,玩家该回合操作结束时如果在该位置停下,会遭受 $50$ 元现金的惩罚(罚金给系统)。
- $D$:Delay,游戏次数惩罚,玩家该回合操作结束时如果在这个位置停下,将会被剥夺下一回合的游戏权利。
- $E$:Estate,房地产。一旦玩家经过或停留在某个未卖出的房地产,并且身上的现金不少于 $100$ 元,那么玩家便会花 $100$ 元购买该位置的房地产;如果买不起,则无事发生。一旦玩家经过或停留在某个已卖出的房地产,那就需要向该处房地产的占有者支付 $5\times delta$ 元的过路费,其中 $delta$ 表示该处房地产被当前的占有者占有的回合数。
例如,如果玩家 A 在第 $x$ 回合开始占有某处房地产,玩家 B 在第 $y\ (y\ge x)$ 回合经过该处房地产,则玩家 B 需要向玩家 A 支付 $5\times(y-x)$ 元现金。(如果 $y=x$ 且玩家 B 在玩家 A 买下该处房地产前经过或停留,则该次不需要支付。)
**第三部分——淘汰规则:**
假如玩家需要支出 $t$ 元钱,并且玩家的现金不足以支付起这 $t$ 元钱,则该玩家直接宣布破产并退出游戏,其剩余的所有现金直接归交易对方所有,所有该玩家名下的房地产也直接归于交易对方名下。如果玩家被淘汰时还在移动过程中,则直接停止移动。
如果交易对方不为玩家,则所有该玩家名下的房地产将被解除占有,由系统重新进行售卖。
**第四部分——特定规则:**
如果游戏持续进行了 $1000$ 回合后仍然没有决出胜负,则判定场上所有尚未淘汰的玩家均为赢家,游戏在第 $1000$ 回合结束后结束。
如果某玩家先前已被淘汰,则在之后游戏的回合内会直接跳过该玩家。
**第五部分——结算规则:**
如果某时刻场上只剩下一名玩家未破产,则游戏立刻结束,该玩家就是最后的赢家。
**第六部分——对于本题:**
给定 $64$ 个位置各自的功能及属性,以及一个长度为 $m$ 的正整数序列,$4$ 名玩家按照上述题意进行游戏。
请写一个程序,按照题目模拟游戏过程,并输出最终四名玩家的信息。
输入格式
前 $8$ 行,每行 $8$ 个字符,第 $i$ 行第 $j$ 个字符表示第 $8i+j-8$ 个位置的功能。
第 $9$ 行包含四个整数 $x_1, x_2, x_3, x_4\ (1\le x_i\le 64)$,分别表示四位玩家的初始位置。
第 $10$ 行包含一个正整数 $m\ (1\le m\le 64)$,表示给定的序列长度。
第 $11$ 行给定一个长度为 $m$ 的序列 $a_1, a_2, a_3, \cdots, a_m (1\le a_i\le 64)$,含义如题意所述。
数据保证所有玩家的初始位置必为“无功能”。
输出格式
你需要按照玩家编号顺序输出所有玩家的信息,总 $4$ 行。
第 $i$ 行开头先输出 `Player i: `,其中 $i$ 表示玩家的编号。
其后,如果玩家 $i$ 已经被淘汰,输出 `Eliminated`;
否则,输出 `Cash=x, Estates=y`,其中 $x$ 表示玩家 $i$ 在游戏结束时剩余的现金,$y$ 表示其占有的房地产数量。
注:建议复制下面的样例输出进行修改,防止因为空格等特殊符号的问题而出错!
样例输入 #1
NPPPPPPP
PPPPPPPN
NNNNNNNN
NNNNNNNN
NNNNNNNN
NNNNNNNN
NNNNNNNN
NNNNNNNN
1 1 1 1
3
1 3 2
样例输出 #1
Player 1: Eliminated
Player 2: Cash=0, Estates=0
Player 3: Eliminated
Player 4: Eliminated
样例输入 #2
NNNENNNN
NNNNNNNN
NNNNNNNN
NNNNNNNN
NNNNNNNN
NNNNNNNN
NNNNNNNN
NNNNNNNN
1 1 1 1
3
2 1 3
样例输出 #2
Player 1: Eliminated
Player 2: Eliminated
Player 3: Cash=1100, Estates=1
Player 4: Eliminated
样例输入 #3
NPNDBNBP
BNNBNNPB
BNNNPDND
NNNBNNDD
PBPBBNPB
BPBNNPND
PBPBPBDP
PPPBNNPN
11 45 14 19
4
1 9 8 10
样例输出 #3
Player 1: Cash=500, Estates=0
Player 2: Eliminated
Player 3: Eliminated
Player 4: Cash=700, Estates=0
提示
对于样例一:
玩家 $1$ 获取行进点数 $a_1=1$,从位置 $1$ 走到位置 $2$,惩罚 $50$ 元,剩余 $250$ 元;
玩家 $2$ 获取行进点数 $a_2=3$,从位置 $1$ 走到位置 $4$,惩罚 $50$ 元,剩余 $250$ 元;
玩家 $3$ 获取行进点数 $a_3=2$,从位置 $1$ 走到位置 $3$,惩罚 $50$ 元,剩余 $250$ 元;
玩家 $4$ 获取行进点数 $a_1=1$,从位置 $1$ 走到位置 $2$,惩罚 $50$ 元,剩余 $250$ 元;
第一回合结束;
玩家 $1$ 获取行进点数 $a_2=3$,从位置 $2$ 走到位置 $5$,惩罚 $50$ 元,剩余 $200$ 元;
玩家 $2$ 获取行进点数 $a_3=2$,从位置 $4$ 走到位置 $6$,惩罚 $50$ 元,剩余 $200$ 元;
玩家 $3$ 获取行进点数 $a_1=1$,从位置 $3$ 走到位置 $4$,惩罚 $50$ 元,剩余 $200$ 元;
玩家 $4$ 获取行进点数 $a_2=3$,从位置 $2$ 走到位置 $5$,惩罚 $50$ 元,剩余 $200$ 元;
第二回合结束;
玩家 $1$ 获取行进点数 $a_3=2$,从位置 $5$ 走到位置 $7$,惩罚 $50$ 元,剩余 $150$ 元;
玩家 $2$ 获取行进点数 $a_1=1$,从位置 $6$ 走到位置 $7$,惩罚 $50$ 元,剩余 $150$ 元;
玩家 $3$ 获取行进点数 $a_2=3$,从位置 $4$ 走到位置 $7$,惩罚 $50$ 元,剩余 $150$ 元;
玩家 $4$ 获取行进点数 $a_3=2$,从位置 $5$ 走到位置 $7$,惩罚 $50$ 元,剩余 $150$ 元;
第三回合结束;
第四至六回合同上,最终所有人都位于位置 $13$,剩余 $0$ 元。
玩家 $1$ 获取行进点数 $a_1=1$,从位置 $13$ 走到位置 $14$,惩罚 $50$ 元,被淘汰,排名第 $4$;
玩家 $2$ 获取行进点数 $a_2=3$,从位置 $13$ 走到位置 $16$,该位置无功能,剩余现金 $0$ 元;
玩家 $3$ 获取行进点数 $a_3=2$,从位置 $13$ 走到位置 $15$,惩罚 $50$ 元,被淘汰,排名第 $3$;
玩家 $4$ 获取行进点数 $a_1=1$,从位置 $13$ 走到位置 $14$,惩罚 $50$ 元,被淘汰,排名第 $2$;
场上仅玩家 $2$ 未被淘汰,游戏结束,玩家 $2$ 为赢家。
对于样例二:
根据顺序,玩家 $3$ 在第一回合获取行进点数 $a_3=3$,花费 $100$ 元购买了位置 $4$ 的房地产,剩余 $200$ 元。
其后,所有玩家经过位置 $4$ 时都需要向玩家 $3$ 支付过路费,直到所有人的现金都支付给玩家 $3$ 并遭受淘汰,因此玩家 $3$ 最终现金为 $1100$ 元,拥有房地产 $1$ 套。
来源
The 20th ZJNU Anniversary Contest | CCat@StelaYuri#20%1207-3-2