这题本质就是 模拟 + 队列 + 栈/表结构维护桌面状态。
我们把三部分状态维护出来:
有两名玩家甲和乙,他们玩一种“小猫钓鱼”扑克牌游戏。扑克牌为 A、2、3、...、J、Q、K,不考虑花色都用 1−13 来表示,然后给甲、乙两人各发 n 张牌,按给定顺序排成队列,这些牌背面朝上,正面朝下放置,队列的第一个元素是背面的第一张牌。
游戏规则如下
1.出牌与收牌
-初始出牌时,甲先出牌,打出的牌正面朝上放在桌面的最底部,然后乙出牌,正面朝上放在甲的牌张上面,然后甲乙轮流出牌,直到触发收牌或者任意一个玩家牌出完。
-如果玩家出牌后触发了收牌,则把收到的一摞牌作为整体翻面后,背面朝上正面朝下放到现有牌的底部,然后当前收牌的玩家继续出牌。
若当前打出的牌点数,与桌面上之前某张牌的点数相同,则触发收牌,收牌的范围是两张相同点数牌之间的所有牌(含这两张)。
-若当前打出的牌是 J,并且此时桌面上已有至少一张牌(不含当前这张),则当前玩家触发收牌,收牌的范围是桌面上的所有牌。若桌面上原本没有牌,则 J 仅作为普通牌放到桌面
3.游戏结束条件
-若某位玩家在自己回合开始时已经没有牌可出,则游戏立即结束,如果此时对方还有余牌,则对方获胜,如果对方也无牌,则平局。
-若在模拟过程中,出牌总次数超过一个上限(10000 次)仍未结束,则认为游戏进入死循环,判定为平局。
甲的初始牌队列和乙的初始牌队列,甲乙初始手牌数量相等,均为整数 n(1≤n≤100)
一方获胜时,输出获胜方手中背面朝上最上方的那张牌的数值。若平局,如果桌面无牌则输出 0,否则输出当前桌面上正面朝上的最上方的那张牌的数值。
输入
[1,2],[10,12]
输出
12
说明
-甲的牌堆:[1,2]
-乙的牌堆:[10,12]
-出牌顺序:甲出 1,乙出 10,甲出 2,乙出 12,甲无牌可出,乙无余牌,游戏结束,平局。
-桌面牌堆为 [1,10,2,12]。
-平局,输出桌面牌堆正面朝上最上方牌的数值:12。
输入
[1,2],[1,2]
输出
1
说明
-甲的牌堆:[1,2]
-乙的牌堆:[1,2]
-出牌顺序:
1.甲出 1,剩余 [2],桌面:[1]。
2.乙出 1,剩余 [2],匹配桌面的 1,拿走 [1,1],桌面:[],放回乙牌堆:乙牌堆变为 [2,1,1]。
3.乙出 2,剩余 [1,1],桌面:[2]。
4.甲出 2,剩余 [],匹配桌面的 2,拿走 [2,2],桌面:[],放回甲牌堆:甲牌堆变为 [2,2]。
5.甲出 2,剩余 [2],桌面: [2]。
6.乙出 1,剩余 [1],桌面: [2,1]。
7.甲出 2,剩余 [],匹配桌面的 2,拿走 [2,1,2],桌面:[],放回甲牌堆:甲牌堆变为 [2,1,2]。
8.甲出 2,剩余 [1,2],桌面:[2]。
9.乙出 1,剩余[],桌面: [2,1]。
10.甲出 1,剩余 [2],匹配桌面的 1,拿走 [1,1],桌面: [2],放回甲牌堆:甲牌堆变为 [2,1,1]。
11.甲出 2,剩余 [1,1],匹配桌面的 2,拿走 [2,2],桌面:[],放回甲牌堆:甲牌堆变为 [1,1,2,2]。
12.甲出 1,剩余 [1,2,2],桌面: [1]。
13.乙无牌可出,甲还有余牌,甲获胜。
-游戏结束,甲牌堆剩余 [1,2,2],输出: 1。
输入
[1,2,11,4],[10,12,2,1]
输出
12
说明
-甲的牌堆:[1,2,11,4]
-乙的牌堆:[10,12,2,1]
-出牌顺序:
1.甲出 1,剩余 [2,11,4],桌面: [1]。
2.乙出 10,剩余 [12,2,1],桌面: [1,10]。
3.甲出 2,剩余 [11,4],桌面: [1,10,2]。
4.乙出 12,剩余 [2,1],桌面: [1,10,2,12]。
5.甲出 11,剩余 [4],触发 J 特效,拿走 [1,10,2,12,11],桌面:[],放回甲牌堆:甲牌堆变为 [4,1,10,2,12,11]。
6.甲出 4,剩余 [1,10,2,12,11],桌面: [4]。
7.乙出 2,剩余 [1],桌面: [4,2]。
8.甲出 1,剩余 [10,2,12,11],桌面: [4,2,1]。
9.乙出 1,剩余[],匹配桌面的 1,拿走 [1,1],桌面: [4,2],放回乙牌堆:乙牌堆变为 [1,1]。
10.乙出 1,剩余 [1],桌面: [4,2,1]。
11.甲出 10,剩余 [2,12,11],桌面: [4,2,1,10]。
12.乙出 1,剩余[],匹配桌面的 1,拿走 [1,10,1],桌面: [4,2],放回乙牌堆:乙牌堆变为 [1,10,1]。
13.乙出 1,剩余 [10,1],桌面: [4,2,1]。
14.甲出 2,剩余 [12,11],匹配桌面的 2,拿走 [2,1,2],桌面: [4],放回甲牌堆:甲牌堆变为 [12,11,2,1,2]。
15.甲出 12,剩余 [11,2,1,2],桌面: [4,12]。
16.乙出 10,剩余 [1],桌面: [4,12,10]。
17.甲出 11,剩余 [2,1,2],触发 J 特效,拿走 [4,12,10,11],桌面:[],放回甲牌堆:甲牌堆变为 [2,1,2,4,12,10,11]。
18.甲出 2,剩余 [1,2,4,12,10,11],桌面: [2]。
19.乙出 1,剩余[],桌面: [2,1]。
20.甲出 1,剩余 [2,4,12,10,11],匹配桌面的 1,拿走 [1,1],桌面: [2],放回甲牌堆:甲牌堆变为 [2,4,12,10,11,1,1]。
21.甲出 2,剩余 [4,12,10,11,1,1],匹配桌面的 2,拿走 [2,2],桌面:[],放回甲牌堆:甲牌堆变为 [4,12,10,11,1,1,2,2]。
22.甲出 4,剩余 [12,10,11,1,1,2,2],桌面: [4]。
23.乙无牌可出,甲还有余牌,甲获胜。
-游戏结束,甲牌堆剩余 [12,10,11,1,1,2,2],输出: 12。