QOJ.ac

QOJ

시간 제한: 1.0 s 메모리 제한: 256 MB 총점: 100

#16971. 纸牌屋

통계

Axel 和 Birgit 喜欢玩一种纸牌游戏。在游戏中,他们通过往纸牌屋中添加纸牌来建造纸牌屋,并以此获得(或失去)积分。由于他们两人的手都很稳,纸牌屋永远不会倒塌。他们使用半副标准扑克牌。一副标准扑克牌有四种花色,两种是红色,两种是黑色。Axel 和 Birgit 仅使用两种花色,一种红色,一种黑色。每种花色有 13 个点数。我们使用表示法 1R, 2R, ..., 13R, 1B, 2B, ..., 13B 来表示点数和颜色。

玩家首先选择纸牌的一个子集,通常是点数不超过某个最大值 $M$ 的所有纸牌。在将修改后的纸牌洗牌后,他们从牌堆顶部取出八张牌,并将它们从左到右依次放置,形成四个“波峰(peaks)”。例如,如果 $M = 13$,且前十张牌(共 26 张)为:

6B 3R 5B 2B 1B 5R 13R 7B 11R 1R ...

那么游戏开始时将有四个波峰和三个“波谷(valleys)”,如图 7 所示。

图 7:由牌堆顶部的 8 张牌形成的波峰和波谷。

其余的牌面朝上排成一排。

每个玩家都与一种颜色相关联:红色或黑色。Birgit 总是黑色,Axel 总是红色。用于形成波峰和波谷的第一张牌的颜色决定了哪个玩家先手。对于图 7 中的示例,由于第一张牌是 6B,因此 Birgit 先手。

玩家轮流进行操作。一个回合包括从牌排的最前端取走一张牌,然后执行以下操作之一:

  1. 保留该牌直到下一回合(这被称为“手牌”)。
  2. 用摸到的牌或手牌覆盖两个波峰之间的波谷,形成一个“地板(floor)”。如果有剩余的牌,则将其作为手牌保留。
  3. 在一个地板上放置两张牌,形成一个波峰(其中一张牌必须是“手牌”)。

并非所有选项在任何时候都可用。任何时候最多只能保留一张手牌,因此只有在玩家当前没有手牌时,第一种选项才可行。

由于排成一排的牌都是面朝上的,因此两位玩家事先都知道摸牌的顺序。

如果玩家通过添加地板形成了一个向下指的三角形,或者通过添加波峰形成了一个向上指的三角形,则分数按如下方式更新:该三角形中三张牌的点数之和将累加到与这三张牌中占多数的颜色相同的玩家的得分中。如果在一次操作中没有形成三角形,则双方的分数保持不变。

在图 7 的示例中,如果 Birgit 将她的牌(11R)放在中间的波谷上,她将获得 14 分。如果她将牌放在左边的波谷上,Axel 将获得 19 分。如果她将牌放在右边的波谷上,Axel 将获得 29 分。

如果在回合结束时没有更多的牌可摸,则游戏结束。如果此时有玩家持有手牌,若该牌的颜色与该玩家的颜色相同,则该牌的点数将加到该玩家的分数中;若颜色不同,则从该玩家的分数中扣除该牌的点数。

游戏结束时,得分较低的玩家将向另一位玩家支付等同于两得分之差的瑞典克朗(Krona 的复数是 Kronor)。如果平局,则无需支付。

你必须编写一个程序,输入洗牌后的牌堆描述和其中一名玩家的名字,并求出在另一名玩家总是做出最佳移动的情况下,该玩家可以赢得的最大金额(或该玩家的最小损失)。

输入格式

输入文件包含多个代表不同游戏的测试用例。每个测试用例由一个名字(AxelBirgit)组成,接着是一个最大点数 $M$($5 \le M \le 13$),然后是牌堆中 $2M$ 张牌按洗牌顺序排列的点数和颜色。点数(从 1 到 $M$)和颜色的每种组合在此列表中都会恰好出现一次。前八张牌按摸牌顺序从左到右形成初始的波峰行,其余项显示其余牌的顺序。

最后一个测试用例后面紧跟一行,包含单词 End

输出格式

对于每个测试用例,输出测试用例编号(从 1 开始)、该测试用例的玩家名字,以及该玩家赢得或失去的金额。如果是平局,则指出平局而不是给出金额。请遵循样例输出的格式。

样例

输入样例 1

Axel 
5 
1R 2R 3R 4R 5R 5B 4B 3B 2B 1B 
Birgit 
5 
1R 2R 3R 4R 5R 5B 4B 3B 2B 1B 
Birgit 
5 
1R 1B 3R 4R 5R 5B 4B 3B 2R 2B 
End

输出样例 1

Case 1: Axel wins 1 
Case 2: Birgit loses 1 
Case 3: Axel and Birgit tie

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.