U451095 扑克牌游戏
题目背景
**7k+恐怖码量警告!作者写了4k+刚写完读入和预处理!**
**本题难的连作者都不想写了。有想挑战的大佬可以来提交。目前只有一组样例,没有数据。**
Poker!Game! Is! My! Favourite! Game!
——[2]()
[2]():下面就是我玩扑克牌时灵光乍现想出的“小”模拟题。
[q]():让我看看!
~~其实本来还想加大小王和“不给风”的,但是由于觉得不太好写,就给删了。~~
题目描述
给定四个人 $A\space B\space C\space D$ 的牌,求按照如下方式出牌,那么这些牌将会如何出?其中的牌为一副标准扑克牌除去大小王。
### 规则:
1. 四最小,三最大。故牌从小到大排序为 `4 5 6 7 8 9 10 J Q K 1 2 3`。其中 `J` `Q` `K` 均为大写字母。
2. 四个人轮流出牌。如果某一方不出,那么按照 `ABCD ABCD...` 的顺序顺延。
3. “对”为两个同数的牌(如 `99`),“顺子”为形同 `456` 这样的牌,“炸”为三个同数的牌(如 `666`),轰为四个同数的牌(如 `8888`)。
4. 顺子之中按照最小的牌定大小,注意 `123` 最小,`QK1` 最大。顺子中尾牌最大到 `1`(例如最长的顺子为 `1 2 3 4 5 6 7 8 9 10 J Q K 1`,不存在以 `2` 结尾的顺子)。
5. “炸”、“轰”能管任何小于当前层级的牌。层级为:其他牌 < 炸 < 轰。
6. “炸”、“轰”都是按照数定大小,但和顺子有所不同的是,`444` 最小,`333` 最大。
### 整理牌
1. 优先找“轰”。
2. 第二优先找“炸”。
3. 第三优先找“顺子”。“顺子”找的越长越好。
4. 第四优先找“对”。
5. 最后找单牌。
### 出牌:
题目**会**给定第一个出牌的人。出牌优先级和下面序号排序相同。如果没有人能管住自己的牌,那么下一轮仍旧按照优先级出牌。一个人出完牌后下一个人“借风”,按照自己的优先级出牌。
1. 首先,有“顺子”就出“顺子”,要求顺子优先保证最小,其次保证最长。如果没有“顺子”可以管,那么用“炸”管上,其次用“轰”管。
2. 其次,有“对”就出“对”,要求从最小的“对”出起。如果没有“对”可以管,那么用“炸”管上,然后用“轰”管。
3. 然后出单张的牌,从最小的单张开始出起。如果没有单张的可以管,那么拆开“轰”(如 `8888` 变为 `8` 和 `888` 并打出 `8`)。其次如果有拆完能够**继续形成“顺子”** 的“顺子”就拆它(如要管上 `6`,拆 `4 5 6 7 8 9 10` 变为 `4 5 6` 和 `8 9 10` 并打出 `7`,默认**拆最长**(第二优先级拆最小)的顺子),再其次拆开“炸”(方式同“轰”),最后拆“对”。
4. 最后,如果除了“炸”和“轰”以外没得可出了,先出“炸”,再出“轰”。
所有管牌都要用**能管的最小的**管。例如自己有 `567` 和 `789` 两个“顺子”,对方出了 `456`,那么优先使用 `567` 来管。
输入格式
前 $4$ 行每行读入 $13$ 张牌(只含 `1 2 3 4 5 6 7 8 9 10 J Q K` 几种),中间以空格隔开,分别表示 $A\space B\space C\space D$ 四个人手里的牌。
最后一行一个字符,表示某个人先出。保证只为 `A` `B` `C` `D` 其中之一。
输出格式
输出若干行。
>首先分类讨论,如果一个人的牌出完了,那么输出格式如下:
>>``Go %c %num``,其中 ``%c`` 表示这个人的名字,``%num`` 表示这是第几个出完牌的人。示例:``Go B 2``。
如果不是,那么这行先输出一个数 $i$ 表示这是第 $i$ 轮出牌。
之后,**输出空格后**输出一个字符(`A`、`B`、`C` 或 `D`),表示这是某个人出的牌。
之后,**输出空格后**输出这个人这一轮打出的牌。每张牌之间用空格隔开。
所有人都出完牌后,牌局结束,输出 `End`。
说明/提示
### 样例解释:
指定 `A` 先出牌。参考优先级,`A` 出了他最小、最长的“顺子”。没人管的上,所以继续参考优先级,`A` 出了一张 `2`,最后剩了一张 `3` 在手里。
此时,他的下位 `B` 可以用 `3` 管上。没人管的上 `B`,所以参考优先级,`B` 也出了同样的“顺子”。没人管的上,所以继续参考优先级,`B` 出了一张 `2`,此时 `B` 成为了第 $1$ 个出完所有牌的人。
`C` 借 `B` 的风,由于此时不牵扯到管牌问题,那么他的出法会和 `A` 相同,此时 `C` 剩了一张 `3` 在手里。
下面 `D` 和当时 `B` 的处境相同,也出同样的牌。`D` 成为了第 $2$ 个出完所有牌的人。
`A` 借 `D` 的风,出完了手里仅剩的一张 `3`,成为了第 $3$ 个出完所有牌的人。
最后,`C` 借 `A` 的风,出完了手里仅剩的一张 `3`,成为了第 $4$ 个出完所有牌的人。
牌局结束。