UVA952 Uno game
题目描述
## Uno 介绍(了解可跳过这一部分):
### 基本介绍
Uno 卡牌中分为两类牌:数字牌与功能牌。其中数字牌有四种颜色(红、黄、蓝、绿),同时带有一个数字(0~9)。功能牌也有四种颜色(红、黄、蓝、绿),同时带有一个功能(change-direction 或 pass)。
### 出牌规则
开始每个人**先**发 7 张牌,牌桌上会有抽牌堆,**再**从抽牌堆中拿最上面的一张牌作为弃牌堆的第一张牌,每个人将会轮流出牌(只能出一张),其中要满足以下规则:
- 若牌桌上是功能牌,出的牌要满足**颜色或功能**与弃牌堆第一张相同。若牌桌上是数字牌,出的牌要满足**颜色或数字**与弃牌堆第一张相同。
- 若手牌中有可以出的牌,出的牌将放在弃牌堆顶。
- 若手牌中没有可以出的牌,**必须**取抽牌堆顶部的一张牌,若抽出的牌满足规则,则可以打出。否则,保留抽出的这张牌,轮到下一个人。
### 功能牌规则
- change-direction 牌:
若打出了这张牌,出牌顺序将会顺逆交换。
> 如原本顺序为 1 → 2 → 3 → 4(这里的数字代表玩家)。若在 1 出完之后, 2 出了一张 change-direction 牌,顺序将会变为 4 → 3 → 2 → 1,也就是下一轮会轮到 1 出牌。
- pass 牌:
若打出了这张牌,将会跳过下一位出牌的玩家。
> 如原本顺序为 1 → 2 → 3 → 4(这里的数字代表玩家)。若在 1 出完之后, 2 出了一张 pass 牌,3 将会被跳过,也就是下一轮会轮到 4 出牌。
### 特殊情况
- 若抽牌堆里没有牌,将会从弃牌堆中取除第一张外的剩下牌并**翻转**牌堆放在抽牌堆。
> 如原本抽牌堆没有牌,弃牌堆从上到下为 $a_1, a_2\cdots a_n$ 共 $n$ 张牌,则经过此操作后抽牌堆从上到下为 $a_n, a_{n-1}\cdots a_2$,弃牌堆从上到下为 $a_1$。
- 若弃牌堆只有一张牌,抽牌堆里没有牌,此时若有玩家要抽牌,跳过此玩家,轮到下一玩家出牌。
## 题面描述
有四个人玩 Uno 牌,每个人都按相同的规则玩牌。每种颜色和数字(或功能)有对应的优先级,如下(值越低优先级越高,先比较颜色,相同再比较值):
| 颜色 | 值 | 数字/功能 | 值 |
| :----------: | :----------: | :----------: | :----------: |
| 蓝 | $1$ | pass | $1$ |
| 红 | $2$ | change-direction | $2$ |
| 黄 | $3$ | 0 ~ 9 | 分别对应 $3 \sim 13$ |
| 绿 | $4$ | | |
当每位玩家在出牌时有很多种选择时,他更喜欢出优先级较高的牌。如玩家认为蓝色 2 会比红色 2 好,红色 pass 会比红色 change-direction 好。
这样每位玩家出的手牌将是固定的,可以预测结果。你将得到每个玩家拥有的牌,以及抽牌和弃牌堆中的牌。您必须输出谁赢得了游戏,以及其他玩家留下了多少张牌。
输入格式
多组数据。
每组数据第一行输入一个字符串 $s$($\texttt{clockwise}$ 或 $\texttt{counter-clockwise}$)和一个数字 $num$(1~4)。其中 $\texttt{clockwise}$ 表示顺时针出牌,也就是 1 → 2 → 3 → 4 → 1,$\texttt{counter-clockwise}$ 表示逆时针出牌,也就是 4 → 3 → 2 → 1 → 4。$num$ 代表第一个出牌的人的编号。
第 2~4 行对应着玩家 1~4 的手牌。每一行第一个数为手牌数量 $t$,后面接着输入 $t$ 个长度为 $2$ 的字符串。其中第一个字符为 $\tt B$,$\tt R$,$\tt Y$,$\tt G$,分别对应蓝,红,黄,绿。第二个字符为 $\tt0\sim9$ 或 $\tt C$ 或 $\tt P$,$\tt C$ 代表 change-direction 牌,$\tt P$ 代表 pass 牌。
第 5~6 行分别代表弃牌堆和抽牌堆,输入顺序按照牌堆从上到下。
玩家在玩的过程中手中牌数不会超过 $100$ 张。
输出格式
令赢的玩家为 $win$,每个玩家剩余的牌为 $l_1, l_2, l_3, l_4$,对于每组数据,以以下格式输出:
>$win\texttt{ is the winner}$
>
>$\texttt{1: }l_1$
>
>$\texttt{2: }l_2$
>
>$\texttt{3: }l_3$
>
>$\texttt{4: }l_4$