P14331 [JOI2021 预选赛 R2] 煎饼 / Pancake

题目描述

比太郎在一家煎饼店工作。 该店最受欢迎的菜单是由 $ N $ 张煎饼堆叠而成的煎饼塔。店中制作的煎饼共有三种口味,分别称为 A、B、C。 这里,我们将满足以下条件的煎饼塔称为“良好煎饼塔”: - 对于任意一张口味 A 的煎饼与一张口味 B 的煎饼,口味 A 的煎饼必须位于口味 B 的煎饼之上。 - 对于任意一张口味 A 的煎饼与一张口味 C 的煎饼,口味 A 的煎饼必须位于口味 C 的煎饼之上。 - 对于任意一张口味 B 的煎饼与一张口味 C 的煎饼,口味 B 的煎饼必须位于口味 C 的煎饼之上。 例如,煎饼口味从上至下依次为 AABBBC、ACC、BBBB 的煎饼塔均为良好煎饼塔;而口味序列为 AABABCC、CA 的煎饼塔则不是良好煎饼塔。 负责摆盘的比太郎可以对煎饼塔执行以下操作: - 操作 $ k $($ 2 \le k \le N $):将从顶部数起第 $ k $ 张煎饼下方插入一个煎饼翻转器,然后将上方的所有煎饼整体翻转。换言之,即反转从顶部数起前 $ k $ 张煎饼的排列顺序。 例如,对于从上至下口味序列为 ABCB 的煎饼塔,若分别执行操作 2、操作 3、操作 4,则煎饼排列将依次变为 BACB、CBAB、BCBA。 现共有 $ Q $ 座煎饼塔,第 $ i $ 座煎饼塔($ 1 \le i \le Q $)从上至下口味序列为 $ S_{i,1} S_{i,2} \cdots S_{i,N} $。比太郎希望对每一座煎饼塔,用尽可能少的操作次数将其变为良好煎饼塔。 给定 $ Q $ 座煎饼塔的口味排列信息,请编写程序,求出每座煎饼塔变为良好煎饼塔所需的最少操作次数。

输入格式

输入通过标准输入以如下格式给出: $ N $ $ Q $ $ S_1 $ $ S_2 $ $ \vdots $ $ S_Q $ 其中,$ S_i $($ 1 \le i \le Q $)是一个长度为 $ N $ 的字符串,其第 $ j $ 个字符($ 1 \le j \le N $)为 $ S_{ij} $。

输出格式

在标准输出中输出 $ Q $ 行。第 $ i $ 行($ 1 \le i \le Q $)应输出将第 $ i $ 座煎饼塔变为良好煎饼塔所需的最少操作次数。

说明/提示

### 样例 1 解释 对于第 1 座煎饼塔,通过执行以下 3 次操作,可以将其变为良好煎饼塔: 1. 执行操作 4,煎饼口味从上至下变为 BCBA A。 2. 执行操作 2,煎饼口味从上至下变为 CBBA A。 3. 执行操作 5,煎饼口味从上至下变为 AABBC。 无法通过 2 次或更少的操作将其变为良好煎饼塔,因此在第 1 行输出 3。 对于第 2 座煎饼塔,通过执行以下 2 次操作,可以将其变为良好煎饼塔: 1. 执行操作 5,煎饼口味从上至下变为 BABCC。 2. 执行操作 2,煎饼口味从上至下变为 ABBCC。 无法通过 1 次或更少的操作将其变为良好煎饼塔,因此在第 2 行输出 2。 对于第 3 座煎饼塔,其本身已是良好煎饼塔,无需执行任何操作。因此,在第 3 行输出 0。 ### 数据范围 - $ 2 \le N \le 13 $。 - $ 1 \le Q \le 100\,000 $。 - $ S_{ij} $ 为 A、B、C 中的某一个($ 1 \le i \le Q $,$ 1 \le j \le N $)。 ### 子任务 1. (4 分)$ N \le 5 $,$ Q = 1 $。 2. (10 分)$ N \le 5 $。 3. (60 分)$ Q = 1 $。 4. (26 分)无额外约束。 翻译由 Qwen3-235B 完成