QOJ.ac

QOJ

Time Limit: 0.2 s Memory Limit: 64 MB Total points: 100

#1468. 洗牌

Statistics

扑克牌玩家在牌桌上的一种常见消遣是洗筹码堆。洗筹码的过程是从两堆筹码 $S_1$ 和 $S_2$ 开始,每堆包含 $C$ 个筹码。每堆筹码可能包含多种不同颜色的筹码。

实际的洗牌操作是通过将 $S_1$ 中的一个筹码与 $S_2$ 中的一个筹码交错放置来完成的,如下图所示(以 $C=5$ 为例):

生成的单个堆 $S_{12}$ 包含 $2 \times C$ 个筹码。$S_{12}$ 的最底层筹码是 $S_2$ 的最底层筹码。在该筹码之上是 $S_1$ 的最底层筹码。交错过程继续,取 $S_2$ 从下往上数的第 2 个筹码放在 $S_{12}$ 上,接着取 $S_1$ 从下往上数的第 2 个筹码,依此类推,直到 $S_1$ 的最顶层筹码被放置在 $S_{12}$ 的最上方。

洗牌操作完成后,$S_{12}$ 被分成两堆新筹码:取 $S_{12}$ 最底层的 $C$ 个筹码形成新的 $S_1$,取 $S_{12}$ 最顶层的 $C$ 个筹码形成新的 $S_2$。洗牌操作可以重复进行以形成新的 $S_{12}$。

对于本题,你需要编写一个程序来确定特定的结果堆 $S_{12}$ 是否可以通过将两堆筹码进行若干次洗牌操作后形成。

输入格式

输入的第一行包含一个整数 $N$ ($1 \le N \le 1000$),表示后续的数据集数量。

每个数据集包含四行输入。第一行指定一个整数 $C$ ($1 \le C \le 100$),表示每个初始堆($S_1$ 和 $S_2$)中的筹码数量。每个数据集的第二行指定了 $S_1$ 中 $C$ 个筹码的颜色,从最底层的筹码开始。每个数据集的第三行指定了 $S_2$ 中 $C$ 个筹码的颜色,从最底层的筹码开始。颜色用单个大写字母(A 到 H)表示。筹码颜色之间没有空格或分隔符。每个数据集的第四行包含 $2 \times C$ 个大写字母(A 到 H),表示对 $S_1$ 和 $S_2$ 进行零次或多次洗牌后期望得到的结果颜色。最底层筹码的颜色最先给出。

输出格式

每个数据集的输出由单行组成,显示数据集编号(1 到 $N$)、一个空格,以及一个整数值,该值是获得期望结果堆所需的最小洗牌次数。如果使用该数据集的输入无法达到期望结果,则输出 -1 表示洗牌次数。

样例

样例输入 1

2
4
AHAH
HAHA
HHAAAAHH
3
CDE
CDE
EEDDCC

样例输出 1

1 2
2 -1

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.