#P161. [CTFPC-3] 打扑克

[CTFPC-3] 打扑克

版权声明

本题版权归 CTFPC 出题组 所有。

题目背景

中秋节小 2 和 CTFPC 的团员们打扑克!

题目描述

扑克是一种风靡全球的游戏,小 2 正在和他的朋友打扑克,与小 2 之前打的智障扑克有很大的不同,这一次的扑克规则更加复杂,现在定义概念:

玩家

玩家有 nn 个,我们保证 n51n\mid 51

出牌顺序为 a,a+1,a+2,,n,1,2,3,4,,a,a+1,a,a+1,a+2,\ldots,n,1,2,3,4,\ldots,a,a+1,\ldots,其中 aa 是地主。

牌型

为正常的斗地主牌型,由小到大如下:

3 4 5 6 7 8 9 10 J Q K A 2 LJ BJ

有其的数值对应:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

除非特殊表明,否则不适用数值对应。

定义第 ii 小的牌为 CiC_i

除了 LJBJ 只有一张外,其它均有 44 张。

对于第 ii 个玩家所有手中的牌,定义为 cic_i

地主牌

地主牌是已经给定了的三张牌,所有玩家在游戏开始前都不知道三张地主牌内的具体内容。

地主牌定义为 x,y,zx,y,z

抢地主

按照以下规则抢地主:

  • 已经有玩家 pp 获得【优先地主权】,玩家 pp 若满足 cpmod3=1\sum c_p \bmod 3 = 1(数值对应),则【叫地主】,若不满足,将【优先地主权】交由下一位玩家。
  • 下一位玩家按照同样的规则判断是否【叫地主】,以此类推。
  • 如果没有任何一个玩家【叫地主】,玩家 pp 强行成为地主。
  • 【叫地主】成功的玩家需要将三张地主牌放入自己的牌的序列之中。

组合

具有以下合法的组合,其中设本次出牌序列为 SS

  • 王炸(S={LJ,BJ}S=\{\rm{LJ}, \rm{BJ}\}
  • 炸弹(S={k,k,k,k}S=\{k,k,k,k\}
  • 对子(S={k,k}S=\{k,k\}
  • 三带一(S={k,k,k,l}S=\{k,k,k,l\}klk\neq l
  • 三带二(S={k,k,k,l,l}S=\{k,k,k,l,l\}klk\neq l
  • 顺子(S={Ck,Ck+1,Ck+2,,Ck+N}S=\{C_k,C_{k+1},C_{k+2},\ldots,C_{k+N}\}N5N\ge5CK+N<2C_{K+N} < \tt 2
  • 飞机($S=\{p \times C_k, p\times C_{k + 1}, p\times C_{k + 2}, \ldots, p \times C_{k + N}\}$,×\times 符号在这里表示重复,其中 2p42\le p\le 4p×(N+1)6p\times (N + 1) \ge 6CK+N<2C_{K + N} < \tt 2
  • 单牌(S={k}S=\{k\}
  • 要不起(SS 为空集)

应牌

应牌方法,按优先级高到低如下,其中最左边一列是上一位玩家的组合:

王炸:要不起
炸弹:炸弹 王炸 要不起
对子:对子 炸弹 王炸 要不起
三带一:三带一 炸弹 王炸 要不起
三带二:三带二 炸弹 王炸 要不起
顺子:顺子 炸弹 王炸 要不起
飞机:飞机 炸弹 王炸 要不起
单牌:单牌 要不起

而在以下情况才能出牌,也就是“要得起”:

  • 炸弹的数字比上一轮大。
  • 三带一和三带二的三张牌比上一轮大,带的牌大小任意。
  • 顺子的数量应当和上一位玩家出的顺子相同,第一张牌要比上一位玩家的大。
  • 飞机的数量亦应当和上一位玩家出的飞机相同,第一张牌要比上一位玩家的大,且单张牌的重复次数亦和上一位玩家的相同
  • 除非上一位玩家出的是炸弹或王炸,炸弹在所有情况下都是能应牌的。
  • 王炸不能应牌。

开牌

将第一轮玩家出任意牌的操作称为“开牌”。

注意:不是单单第一轮叫“开牌”,当一个玩家的出牌组合使没有人能应牌时,他的操作也为开牌。

开牌的优先级从高到低如下:

飞机
顺子
三带二
三带一
对子
单牌

出牌的原则是越小越好。顺子和飞机先是第一张牌越小越好,再是最后一张牌越小越好,最后是单次能出的牌越少越好。

输赢

谁先出完了谁就赢。

需要注意的是,地主先出完只有地主自己一个人赢,平民先出完所有平民都赢。因此赢的人数可以有多个。

输入格式

第一行一个正整数 nn 表示玩家的个数。

从第二行到第 n+1n+1 行,每行 51n\dfrac{51}{n} 个字符串,表示每个人持有的牌。

n+2n+2 行有三个整数,表示三张地主牌 x,y,zx,y,z

n+3n+3 行一个整数,为优先地主权的持有者 pp

输出格式

输出一个或 n1n - 1 个正整数,描述所求。

样例

3
A A A 2 3 3 4 4 5 8 10 J J K K LJ BJ
A 2 2 3 3 4 4 6 7 7 7 9 10 Q Q K K 
2 5 5 5 6 6 6 7 8 8 8 9 9 J J Q Q
9 10 10
1
1 2

样例解释

三个人手牌数值之和  ⁣ ⁣mod3\!\!\mod 3 分别为 0,0,10,0,1,因此第三个人抢到地主:

[Last Card] None
(17)    [1] A A A 2 3 3 4 4 5 8 10 J J K K LJ BJ
(17)    [2] A 2 2 3 3 4 4 6 7 7 7 9 10 Q Q K K 
(20) -> [3] 2 5 5 5 6 6 6 7 8 8 8 9 9 9 10 10 J J Q Q

第三个人出了飞机 5 5 5 6 6 6

[Last Card] 5 5 5 6 6 6
(17) -> [1] A A A 2 3 3 4 4 5 8 10 J J K K LJ BJ
(17)    [2] A 2 2 3 3 4 4 6 7 7 7 9 10 Q Q K K 
(14)    [3] 2 7 8 8 8 9 9 9 10 10 J J Q Q

第一个人直接上了王炸 LJ BJ,没人要牌:

[Last Card] LJ BJ
(15)    [1] A A A 2 3 3 4 4 5 8 10 J J K K
(17) -> [2] A 2 2 3 3 4 4 6 7 7 7 9 10 Q Q K K 
(14)    [3] 2 7 8 8 8 9 9 9 10 10 J J Q Q

第一个人出了三带二 A A A 3 3,没人要牌:

[Last Card] A A A 3 3
(10)    [1] 2 4 4 5 8 10 J J K K
(17) -> [2] A 2 2 3 3 4 4 6 7 7 7 9 10 Q Q K K 
(14)    [3] 2 7 8 8 8 9 9 9 10 10 J J Q Q

第一个人出了对子 4 4

[Last Card] 4 4
( 8)    [1] 2 5 8 10 J J K K
(17) -> [2] A 2 2 3 3 4 4 6 7 7 7 9 10 Q Q K K 
(14)    [3] 2 7 8 8 8 9 9 9 10 10 J J Q Q

第二个人要了 7 7

[Last Card] 7 7
( 8)    [1] 2 5 8 10 J J K K
(15)    [2] A 2 2 3 3 4 4 6 7 9 10 Q Q K K 
(14) -> [3] 2 7 8 8 8 9 9 9 10 10 J J Q Q

第三个人要了 8 8

[Last Card] 8 8
( 8) -> [1] 2 5 8 10 J J K K
(15)    [2] A 2 2 3 3 4 4 6 7 9 10 Q Q K K 
(12)    [3] 2 7 8 9 9 9 10 10 J J Q Q

第一个人要了 J J

[Last Card] J J
( 6)    [1] 2 5 8 10 K K
(15) -> [2] A 2 2 3 3 4 4 6 7 9 10 Q Q K K 
(12)    [3] 2 7 8 9 9 9 10 10 J J Q Q

第二个人要了 Q Q

[Last Card] Q Q
( 6)    [1] 2 5 8 10 K K
(13)    [2] A 2 2 3 3 4 4 6 7 9 10 K K 
(12) -> [3] 2 7 8 9 9 9 10 10 J J Q Q

第三个人要不起,但第一个人要了 K K

[Last Card] K K
( 4)    [1] 2 5 8 10 
(13) -> [2] A 2 2 3 3 4 4 6 7 9 10 K K 
(12)    [3] 2 7 8 9 9 9 10 10 J J Q Q

第二个人要了 2 2,此时没人要的起:

[Last Card] 2 2
( 4)    [1] 2 5 8 10 
(11)    [2] A 3 3 4 4 6 7 9 10 K K 
(12) -> [3] 2 7 8 9 9 9 10 10 J J Q Q

第二个人出了对子 3 3

[Last Card] 3 3
( 4)    [1] 2 5 8 10 
( 9)    [2] A 4 4 6 7 9 10 K K 
(12) -> [3] 2 7 8 9 9 9 10 10 J J Q Q

第三个人要了 9 9

[Last Card] 9 9
( 4) -> [1] 2 5 8 10 
( 9)    [2] A 4 4 6 7 9 10 K K 
(10)    [3] 2 7 8 9 10 10 J J Q Q

第一个人要不起,但第二个人要了 K K,此时没人要的起:

[Last Card] K K
( 4)    [1] 2 5 8 10 
( 7)    [2] A 4 4 6 7 9 10 
(10) -> [3] 2 7 8 9 10 10 J J Q Q

第二个人出了对子 4 4

[Last Card] 4 4
( 4)    [1] 2 5 8 10 
( 5)    [2] A 6 7 9 10 
(10) -> [3] 2 7 8 9 10 10 J J Q Q

第三个人要了 10 10,此时没人要的起:

[Last Card] 10 10
( 4) -> [1] 2 5 8 10 
( 5)    [2] A 6 7 9 10 
( 8)    [3] 2 7 8 9 J J Q Q

第三个人出了对子 J J,没人要的起:

[Last Card] J J
( 4) -> [1] 2 5 8 10 
( 5)    [2] A 6 7 9 10 
( 6)    [3] 2 7 8 9 Q Q

第三个人出了对子 Q Q,没人要的起:

[Last Card] Q Q
( 4) -> [1] 2 5 8 10 
( 5)    [2] A 6 7 9 10 
( 4)    [3] 2 7 8 9

第三个人出了单牌 7

[Last Card] 7
( 4) -> [1] 2 5 8 10 
( 5)    [2] A 6 7 9 10 
( 3)    [3] 2 8 9

第一个人要了 8

[Last Card] 8
( 3)    [1] 2 5 10 
( 5) -> [2] A 6 7 9 10 
( 3)    [3] 2 8 9

第二个人要了 9

[Last Card] 9
( 3)    [1] 2 5 10 
( 4)    [2] A 6 7 10 
( 3) -> [3] 2 8 9

第三个人要了 2,此时没人要的起:

[Last Card] 2
( 3) -> [1] 2 5 10 
( 4)    [2] A 6 7 10 
( 2)    [3] 8 9

第三个人出了单牌 8

[Last Card] 8
( 3) -> [1] 2 5 10 
( 4)    [2] A 6 7 10 
( 1)    [3] 9

第一个人要了 10

[Last Card] 10
( 2)    [1] 2 5
( 4) -> [2] A 6 7 10 
( 1)    [3] 9

第二个人要了 A

[Last Card] A
( 2)    [1] 2 5
( 3)    [2] 6 7 10
( 1) -> [3] 9

第三个人要不起,但第一个人要了 2,此时没人要的起:

[Last Card] 2
( 1)    [1] 5
( 3) -> [2] 6 7 10
( 1)    [3] 9

第一个人出了单牌 5

[Last Card] 5
( 0)    [1] 
( 3) -> [2] 6 7 10
( 1)    [3] 9

此时第一个人的手牌打完,故作为农民的第一个和第二个人胜利。

数据范围

测试点编号 n=n=
1 1 11
242 \sim 4 1717
5105 \sim 10 33

对于 100%100\% 的数据,n{1,3,17}n \in \{1,3,17\} 且给出的 5454 张牌构成一副完整的扑克牌。