#P13816. [CERC 2022] The Game

[CERC 2022] The Game

Description

Vladimir 是邻居中最孤独的孩子,没有其他孩子愿意和他玩。他的父母为了让他开心,给他买了一款叫做 The Game 的纸牌游戏。这款纸牌游戏最多可以 5 人玩,但也可以以 单人(即单人模式)进行。

包装盒里有 98 张 普通 牌,编号为 2,3,,992, 3, \ldots, 99。除此之外,还有 4 张特殊的 方向 牌。其中两张标有数字 11(后面带有向上箭头),另外两张标有数字 100100(后面带有向下箭头)。

游戏初始阶段,将普通牌洗牌后叠放在桌面上,面朝下——这就是 抽牌堆。四张方向牌则竖直摆放;两张标有 11 的牌必须放在最上面。每张方向牌右侧要留出足够空间——普通牌将在游戏过程中依次放在这里。标有 11 的牌各自开启一条 递增行,而标有 100100 的牌各自开启一条 递减行。在单人模式下,玩家从抽牌堆顶依次抽取前 8 张牌,作为手牌。

初始阶段结束后,游戏开始。每一回合,玩家必须从手牌中打出两张牌,规则如下:

  • 如果某张牌比递增行最后(最右侧)一张牌的数字大,可以放在该递增行末尾。
  • 如果某张牌比递减行最后一张牌的数字小,可以放在该递减行末尾。
  • 如果某张牌比递增行最后一张牌的数字小,且两者的绝对差恰好为 1010,也可以放在该递增行末尾;或者某张牌比递减行最后一张牌的数字大,且两者的绝对差恰好为 1010,也可以放在该递减行末尾。这种操作称为 倒退技巧(backwards trick)。注意,由于这个额外规则,递增行的牌不一定严格递增(递减行同理)。

每回合打出两张牌后,玩家应从抽牌堆顶依次再抽两张牌补充手牌。这样本回合结束。如果抽牌堆已空,则继续按上述方式出牌,但不再补牌。游戏在以下两种情况下结束:如果玩家手牌已空(此时玩家 赢得了游戏);如果玩家手牌中所有牌都无法出牌(此时玩家 输掉了游戏)。

示例: 假设玩家初始手牌(即前 8 张抽到的牌)为:

69, 17, 59, 32, 31, 77, 87, 89

他可以选择打出 89(放在第一条递减行)和 17(放在第二条递增行)。此时四条行的状态为:

1 -> 17  
1 ->  
100 <- 89  
100 <-

然后他需要从抽牌堆顶再抽两张牌——假设是 848433——此时手牌变为:

69,59,32,31,77,87,84,369, 59, 32, 31, 77, 87, 84, 3

第二回合,他可能会选择打出 33(放在第一条递增行)和 8787(放在第一条递减行,接在 8989 后)。此时四条行的状态为:

1 -> 3  
1 -> 17
100 <- 89, 87 
100 <-

Vladimir 玩了几次,发现并不总能赢得游戏。因为他讨厌输,所以你需要写一个程序,检查给定的抽牌堆,预测游戏的最终结果。这将帮助 Vladimir 决定是否要玩这局。

你还需要知道,Vladimir 是个非常理性且可预测的人。他出牌时遵循以下优先级规则:

  • 抽到新牌时,总是放在手牌最右侧。
  • 每次出牌时,按如下优先级选择:
    1. 如果有一张或多张牌可以进行倒退技巧,他会选择最左侧的那张。如果这张牌可以在多个行上使用倒退技巧,则选择最上面的那一行。
    2. 否则,他会按常规方式出牌。选择出牌和放置的行,使得所打牌与该行最后一张牌的数字差的绝对值最小。如果有多张牌达到最小值,则选择最左侧的那张。如果有多个可放置的行,则选择最上面的那一行。

你的程序应输出游戏的最终状态。

Input Format

输入仅一行,包含 98 个用空格分隔的整数,即集合 {2,3,,99}\{2, 3, \ldots, 99\} 的某个排列,表示初始抽牌堆。牌的顺序从堆顶到堆底。

Output Format

输出共六行。前四行分别描述桌面上的四条行。第五行输出玩家手中剩余的牌(如有),第六行输出抽牌堆中剩余的牌(如有)。若某行对应的列表为空,则输出空行。四条行和手牌中的牌应从左到右输出,最后一行(抽牌堆剩余牌)应按输入顺序(从堆顶到堆底)输出。具体格式见样例输出。

96 69 40 94 35 7 53 88 10 89 47 37 16 61 24 46 90 6 33 25 63 73 26 81 2 45 77 75 48 57 66 34 59 92 44 11 31 18 9 52 91 50 8 98 5 64 86 62 83 4 19 3 27 97 28 36 23 76 58 30 38 12 39 78 41 56 80 67 70 99 13 42 17 49 84 22 32 29 54 71 51 74 79 95 72 15 87 21 65 68 60 85 55 43 93 20 82 14
1 7 10 16 6 9 11 18 31 62 64 83 86 91 92 97 98 99
1 2 5 8 19 23 27 28 30 36 38 39 41 56 58 67 70 76 78 80 84 74 79 95
100 96 94 89 88 69 61 53 47 46 40 37 35 33 26 25 24 34 44 42 22 32 29 17 13 12 4 3
100 90 81 77 75 73 66 63 59 57 52 50 48 45 21 15
49 54 71 51 72 87 65 68
60 85 55 43 93 20 82 14
87 31 58 56 82 93 9 68 65 41 26 64 3 11 5 84 24 46 16 30 14 85 52 12 91 75 96 17 47 37 76 69 78 49 25 28 48 81 95 63 34 43 27 74 80 62 53 83 40 71 72 35 23 21 51 66 55 61 67 32 38 29 60 39 4 18 20 77 7 94 59 42 79 10 92 97 57 2 86 33 89 90 88 19 22 99 45 44 73 70 50 6 15 98 54 13 36 8
1 9 11 16 24 14 17 26 28 30 31 34 62 74 78 80 81 71 72 83 95 96 97 99
1 3 5 12 25 27 29 38 39 42 59 60 66 67 57 77 79 86 89 90 92 94 98 88
100 93 87 82 68 65 64 58 56 46 41 37 47 43 53 51 61 55 45 44 33 22 20 19 15 13 10 8 6
100 91 85 84 76 75 69 63 52 49 48 40 35 32 23 21 18 7 4 2
73 70 50 54 36

Hint

由 ChatGPT 4.1 翻译