SP2527 GNY07E - Flipping Burned Pancakes
题目描述
在 Frobbozz 魔法煎饼店,厨师有时会在煎饼烙到一半时睡着,导致煎饼的一面被烧焦。显然,把这种煎饼直接端给顾客不太合适。因此,服务员需要重新整理这些煎饼,使烧焦面都朝下。你的任务是帮助服务员正确地堆放煎饼。
我们起始有 **$N$** 个不一样大小的煎饼,它们中的每一个都有一面被烧焦。目标是将这些煎饼按大小顺序排序,最小的在最上面,最大的在最下面,同时确保所有煎饼的烧焦面都朝下。你可以将顶部的 **$k$** 个煎饼作为一个整体翻转,使得第 **$k$** 个煎饼移到顶部,原来在顶部的则移到第 **$k$** 个位置,烧焦面也会从上变下或从下变上。
例如(+ 表示底部被烧,- 表示顶部被烧):
```
+1 -3 -2 [翻转 2] ⇒ +3 -1 -2 [翻转 1] ⇒ -3 -1 -2 [翻转 3] ⇒
+2 +1 +3 [翻转 1] ⇒ -2 +1 +3 [翻转 2] ⇒ -1 +2 +3 [翻转 1] ⇒ +1 +2 +3
```
你需要编写一个程序,找到一个至多 **$(3n – 2)$** 次翻转的操作序列,使得给定的煎饼堆变为大小有序且烧焦面向下的形式。
输入格式
输入的第一行是一个整数 $N$,表示接下来有多少组数据。接下来的 $N$ 行,每行描述一个数据集。每个数据集首先是一个整数 $M$,表示煎饼的数量,其后是 $M$ 个数字,这些数字是 1 到 $M$ 的某种排列,每个数字带有正号或负号,表示煎饼的大小和烧焦面朝上(-)还是朝下(+)。其中,$M$ 最大为 30。
输出格式
对于每个数据集,你需要输出一行,格式如下:数据集编号(从 1 开始),一个空格,完成排序所需的翻转次数 $K$($K \ge 0$),以及 $K$ 个数字,每个数字表示对应步骤中翻转的煎饼数量。注意,对某些数据集,可能存在多个正确解。例如,3 2 3 也是一个合法的解法。
**本翻译由 AI 自动生成**