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$