Description
Lina 正在玩一排 n 个方块。每个方块上写有一个从 1 到 n 的整数。每个整数从 1 到 n 恰好出现一次。
最初,这些方块从左到右的数字依次为 a1,a2,…,an。Lina 希望将这些方块从左到右的数字变为 b1,b2,…,bn。
Lina 可以交换任意两个相邻的方块,但只有当它们上面的数字之差至少为 2 时才能交换。这个操作最多可以执行 20000 次。
请你找出一种交换序列,将初始排列变为目标排列,或者判断是否不可能完成。
第一行包含一个整数 n,表示方块的数量(1≤n≤100)。
第二行包含 n 个互不相同的整数 a1,a2,…,an,表示初始排列(1≤ai≤n)。
第三行包含 n 个互不相同的整数 b1,b2,…,bn,表示目标排列(1≤bi≤n)。
如果无法通过允许的操作将初始排列变为目标排列,输出一行 −1。
否则,第一行输出一个整数 k,表示操作次数(0≤k≤20000)。
第二行输出 k 个整数 s1,s2,…,sk,依次表示每次操作(1≤si≤n−1)。其中 si 表示将第 si 个方块与第 si+1 个方块交换。
你不需要输出最短的方案。只要满足条件的方案都可以被接受。
5
1 3 5 2 4
3 5 1 4 2
3
1 2 4
4
1 2 3 4
4 3 2 1
-1
Hint
在第一个样例中,数字的排列变化如下:
1 3 5 2 4 → 1 5 3 2 4 → 5 1 3 2 4 → 5 3 1 2 4 → 5 3 1 4 2 → 3 5 1 4 2
在第二个样例中,初始排列中甚至无法进行一次合法的交换。
由 ChatGPT 4.1 翻译