#P2035. Hit or Miss
Hit or Miss
题目描述
一种非常简单的纸牌游戏叫做“Hit or Miss”(也被称为“Frustration”、“Harvest”、“Roll-Call”、“Talkative”或“Treize”),玩法如下:
- 使用一副标准的 52 张扑克牌(共 4 组,每组包含数字 到 ,花色不影响游戏),洗牌后开始按顺序数数:,数到 后重新从 开始。
- 每次数数时,查看牌堆顶的牌:
- 如果当前数的数字与牌的数字匹配,则将该牌从牌堆中移除;
- 如果不匹配,则将该牌移到牌堆的底部。
- 如果能移除所有牌(可能需要很长时间),则获胜。
这个游戏可以扩展为多人版本:
- 第一个玩家从 52 张牌的牌堆开始,其他玩家初始没有牌。
- 当第一个玩家移除牌时,她将牌传给第二个玩家,第二个玩家开始同样的游戏,从 开始数数。
- 当第二个玩家匹配到牌时,他将牌传给第三个玩家,依此类推。
- 最后一个玩家匹配到牌时直接丢弃,而不是传给第一个玩家。
所有拥有牌的玩家同步执行以下 2 步循环:
- 计数和匹配阶段:
- 每个玩家说出当前的计数值,并检查是否匹配牌堆顶的牌。
- 如果不匹配,则将牌移到牌堆底部;
- 如果匹配,则将该牌传给下一个玩家(如果是最后一个玩家,则直接丢弃)。
- 传递阶段:
- 除第一个玩家外,每个玩家将收到的牌(如果有)放到自己牌堆的底部。
重复这些步骤,直到:
- 游戏胜利(所有牌被最后一个玩家丢弃),或
- 进入无法获胜的状态(如无限循环)。
如果某个玩家牌堆为空,他会等待,直到收到牌后从上次中断的计数值继续(例如,玩家 3 在计数 时传出了最后一张牌,他会等待,直到从玩家 2 收到牌后,在下一个循环开始时从 继续计数)。
输入格式
- 输入包含多组测试数据。
- 第一行是一个正整数 ,表示测试数据的组数。
- 每组测试数据占一行,包含 个整数:
- 第一个整数表示玩家数量();
- 接下来的 个整数表示初始牌堆的顺序(牌堆顶的牌在前),数字范围为 到 。
输出格式
对于每组测试数据:
- 输出测试数据的编号(从 开始);
- 如果游戏无法获胜,输出
unwinnable
; - 否则,输出每个玩家最后丢弃的牌(按玩家顺序输出,用空格分隔)。
样例输入
2
4 1 2 3 4 5 6 7 8 9 10 11 12 13 1 2 3 4 5 6 7 8 9 10 11 12 13 1 2 3 4 5 6 7 8 9 10 11 12 13 1 2 3 4 5 6 7 8 9 10 11 12 13
2 2 3 4 5 6 7 8 9 10 11 12 13 1 2 3 4 5 6 7 8 9 10 11 12 13 1 2 3 4 5 6 7 8 9 10 11 12 13 1 2 3 4 5 6 7 8 9 10 11 12 13 1
样例输出
Case 1: 13 13 13 13
Case 2: unwinnable