QOJ.ac

QOJ

时间限制: 15.0 s 内存限制: 1024 MB 总分: 100 可 Hack ✓

#9304. 魔方选手肖恩

统计

Sean 是中国最优秀的魔方选手之一。今天,他正在参加中国口袋魔方大赛(CCPC)的“最少步数还原”项目。

口袋魔方是 $2 \times 2 \times 2$ 的魔方。魔方的每个面都可以顺时针或逆时针旋转。一个标准还原状态的口袋魔方配色方案如下(如图 1 所示):顶面为黄色,底面为白色,左面为橙色,右面为红色,前面为蓝色,后面为绿色。

图 1:标准口袋魔方的还原状态

“最少步数还原”项目要求选手找到一个操作序列,将口袋魔方的一种状态变换为另一种状态,在所有参赛者中找到最短序列的选手获胜。在该项目中,选手可以旋转六个面中的任意一个,也可以旋转整个口袋魔方。注意,旋转 90 度计为 1 步,旋转 180 度计为 2 步;然而,旋转整个魔方不计入总步数。

由于存在数百万种本质不同的状态,这对 Sean 来说太难了,他无法独立解决。他希望你编写一个程序,在给定初始状态和目标状态的情况下,求出最少需要的步数。你能帮帮他吗?

输入格式

输入的第一行包含一个整数 $T$ ($1 \le T \le 250\,000$),表示测试用例的数量。

每个测试用例以一个空行开始,随后是六行,表示初始状态和目标状态。状态由口袋魔方的展开图表示,格式如下:

XX
XX
XXXXXXXX
XXXXXXXX
XX
XX

其中 X 是 $\{G, O, Y, R, W, B\}$ 中的一个大写字母,分别代表绿色、橙色、黄色、红色、白色和蓝色,其他字符为空格。初始状态和目标状态水平并排,每行由竖线 | 分隔。换句话说,第 1 到第 8 列表示初始状态,第 9 列为竖线,第 10 到第 17 列表示目标状态。保证两种状态都是合法的,即它们都可以通过有限步操作还原到标准状态。

输出格式

对于每个测试用例,输出一行,包含一个整数,表示将初始状态变换为目标状态所需的最少步数。

样例

样例输入 1

2

GO | WG
GO | WY
OOYBYWBW|ROGBRYRG
RRYRBWRB|BOGBWYBW
GY | YO
WG | RO

WR | YR
OR | OW
OYGBWGYB|OWBRBYBG
BWGWRBYY|YOWRYGWO
OG | GG
OR | BR

样例输出 1

2
11

说明

在样例数据的第一个测试用例中,最优操作序列如图 2 所示。总步数为 2(注意第一步不计入步数),且可以证明无法用少于 2 步完成。

图 2:第一个测试用例的最优操作序列

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.