1 solutions
-
0
题面描述
塔子哥组织了一场消消乐小游戏,共有 ( N ) 名玩家参与,手中各有 ( M/N ) 张卡片,游戏由塔子哥开始,玩家依次出牌,若出牌与桌面上的牌相同,则可以将相同牌及其夹在其中的牌拿走并放回手牌中。游戏持续进行,直到倒数第二位玩家出完手牌,最终输出获胜者的轮数、编号以及最后手中的牌顺序。
题解:模拟
使用双端队列+哈希表来模拟整个游戏的过程 玩家手里面的牌可以使用双端队列来模拟,出牌操作就是弹出队头元素,用哈希表记录当前桌面上的牌,如果哈希表检测到玩家打出的牌桌面上存在,则需要把桌面的部分牌回收到当前玩家手中,并更新哈希表中的元素。
某一个玩家被淘汰就说明队列为空,游戏结束说明在场的玩家数量
cnt=1
代码分析
-
输入部分:
- 代码首先读取参与游戏的人数和总卡片数,确保玩家的手牌能够均分。
-
玩家手牌初始化:
- 使用双端队列来存储每位玩家的手牌,这样可以方便地进行出牌和回收操作。手牌的读取通过循环完成,确保每位玩家的初始手牌正确存储。
-
桌面牌管理:
- 使用哈希表来记录桌面上每张牌的出现次数。这个结构有助于快速判断出牌是否能够触发回收操作。同时,还使用一个数组模拟桌面上的牌堆,按顺序存储出牌的结果。
-
游戏进行循环:
- 通过一个主循环来控制游戏的进行,直到剩下的玩家数量为一。在每轮中,轮数加一,遍历所有玩家进行出牌。
-
出牌逻辑:
- 每位玩家依次出牌,检查其手牌是否为空。如果不为空,则获取并移除队首的牌。出牌的逻辑首先判断这张牌是否在桌面上存在。
-
牌匹配与回收:
- 如果出牌与桌面上的牌匹配,则会将桌面上的所有匹配牌及其夹在中间的牌回收并放回出牌玩家的手牌。这个过程需要更新哈希表中的牌的出现次数,并保持桌面牌的顺序。
-
淘汰逻辑:
- 在出牌过程中,如果玩家的手牌出完,减少剩余玩家的数量,并在合适的情况下终止游戏。
-
游戏结果输出:
- 最后,代码会输出游戏进行了多少轮,最后一个出局的玩家的编号,以及该玩家最后手中剩余的牌的顺序。
C++
Java
Python3
-
- 1
Information
- ID
- 66
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 4
- Tags
- # Submissions
- 160
- Accepted
- 34
- Uploaded By