QOJ.ac

QOJ

时间限制: 1.0 s 内存限制: 512 MB 总分: 100 可 Hack ✓

#14534. 怀疑 VS 谎言

统计

Doubt VS Lie 是一种扑克游戏。最初有 4 名玩家,分别用 0, 1, 2, 3 表示。对于玩家 $x$,定义 $S(x)$ 为他/她当前手牌的集合。在最开始,对所有 $0 \le x \le 3$ 有 $|S(x)| = 13$,且对于任意 $0 \le x, y \le 3, x \neq y$,有 $S(x) \cap S(y) = \emptyset$。$\bigcup S(x)$ 恰好是一副不含大小王的扑克牌。正如你稍后会知道的,在这个游戏中,卡牌的花色并不重要。因此,你可以假设 $\bigcup S(x)$ 恰好包含 4 张 Ace、4 张 2、4 张 3、……、4 张 Queen 和 4 张 King。为方便起见,在输入/输出和以下说明中,我们用 “1” 表示 Ace,“11” 表示 Jack,“12” 表示 Queen,“13” 表示 King,其他牌则用它们的数字(2 到 10)表示。

游戏过程如下:

  1. 首先,玩家 0 选择一个 $x$($1 \le x \le 13$)以及他/她手中的任意 $y$($1 \le y \le |S(0)|$)张牌,将这 $y$ 张牌背面朝上放在桌上,然后声明:“这是 $y$ 张牌 $x$”。
  2. 当玩家 $p$ 完成他/她的操作后,轮到玩家 $q$($q = (p + 1) \bmod 4$)。
    • (a) 如果玩家 $p$ 打出了牌并声明“这是 $y$ 张牌 $x$”,玩家 $q$ 可以选择:
      • i. 从他/她手中任意打出 $z$($1 \le z \le |S((p + 1) \bmod 4)|$)张牌,背面朝上放在桌上,然后声明:“这是 $z$ 张牌 $x$”。注意,$x$ 必须与玩家 $p$ 声明的相同。
      • ii. 不打牌并提出质疑。然后他将翻开玩家 $p$ 刚刚打出的牌,并检查其声明是否属实。如果属实,则质疑失败,玩家 $q$ 必须将桌上的所有牌收回自己手中。否则,质疑成功,玩家 $p$ 必须将桌上的所有牌收回自己手中。
    • (b) 如果玩家 $p$ 提出了质疑,无论质疑是否成功,玩家 $q$ 都要选择一个 $x$($1 \le x \le 13$)以及他/她手中的任意 $y$($1 \le y \le |S(q)|$)张牌,将这 $y$ 张牌背面朝上放在桌上,并像玩家 0 最初那样声明:“这是 $y$ 张牌 $x$”。注意,此时 $x$ 可以任意选择。
  3. 当有玩家选择提出质疑,在某人收走桌上的所有牌之后,如果有人手中没有牌,则该玩家赢得游戏。

为简化起见,这次你只需要编写一个程序来模拟游戏过程。

输入格式

首先是 4 行,第 $i$ 行包含 13 个数字,表示玩家 $(i - 1)$ 手中的牌。

接下来一行包含一个整数 $m$($2 \le m \le 20$),表示游戏的轮数。接下来的 $m$ 行,每行是以下格式之一(不含引号):

  1. S x y a1 a2 ... ay”,表示当前玩家打出牌 $a_1, a_2, \dots, a_y$,并声明“这是 $y$ 张牌 $x$”。
  2. ! y a1 a2 ... ay”,表示当前玩家选择不提出质疑,并打出 $y$ 张牌 $a_1, a_2, \dots, a_y$,并声明“这是 $y$ 张牌 $x$”,其中 $x$ 保持不变。
  3. ?”,表示当前玩家选择提出质疑。

测试数据保证所有操作都是合法的。并且在游戏过程中,没有人会赢得游戏(即游戏不会提前结束)。

输出格式

输出共 4 行,第 $i$ 行按非递减顺序输出在 $m$ 轮后玩家 $(i - 1)$ 手中的牌。

样例

输入样例 1

8 12 12 9 3 10 13 11 12 4 10 2 1
2 10 13 9 9 3 12 4 6 13 3 11 13
11 1 10 5 7 4 5 6 7 7 5 6 9
4 11 2 1 8 8 3 2 6 5 8 7
5
S 1 2 2 3
! 1 2
! 1 1
! 2 1 1
?

输出样例 1

1 1 1 1 2 2 3 4 8 9 10 10 11 12 12 12 13
3 3 4 6 9 9 10 11 12 13 13 13
4 5 5 5 6 6 7 7 7 9 10 11
2 2 3 4 5 6 7 8 8 8 11

输入样例 2

8 12 12 9 3 10 13 11 12 4 10 2 1
2 10 13 9 9 3 12 4 6 13 3 11 13
11 1 10 5 7 4 5 6 7 7 5 6 9
4 11 2 1 8 8 3 2 6 5 8 7
6
S 1 2 2 3
! 1 2
! 1 1
! 2 1 1
! 1 1
?

输出样例 2

4 8 9 10 10 11 12 12 12 13
1 1 1 1 2 2 3 3 3 4 6 9 9 10 11 12 13 13 13
4 5 5 5 6 6 7 7 7 9 10 11
2 2 3 4 5 6 7 8 8 8 11

输入样例 3

8 12 12 9 3 10 13 11 12 4 10 2 1
2 10 13 9 9 3 12 4 6 13 3 11 13
11 1 10 5 7 4 5 6 7 7 5 6 9
4 11 2 1 8 8 3 2 6 5 8 7
8
S 3 1 3
! 2 2 4
! 1 4
?
S 4 1 2
! 1 3
! 1 4
?

输出样例 3

1 4 8 9 10 10 11 12 12 12 13
3 6 9 9 10 11 12 13 13 13
1 2 3 4 5 5 5 6 6 7 7 7 9 10 11
1 1 2 2 2 3 3 4 4 5 6 7 8 8 8 11

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.