CF1700F Puzzle
题目描述
学生 Alice 和 Ibragim 是最好的朋友。Ibragim 的生日快到了,所以 Alice 决定送他一个新的谜题。这个谜题可以表示为一个有 $2$ 行 $n$ 列的矩阵,每个元素都是 $0$ 或 $1$。每次操作,你可以交换相邻两个格子中的数值。
更正式地说,我们将行从上到下编号为 $1$ 到 $2$,列从左到右编号为 $1$ 到 $n$。我们用 $(x, y)$ 表示第 $x$ 行第 $y$ 列的格子。如果两个格子 $(x_1, y_1)$ 和 $(x_2, y_2)$ 满足 $|x_1 - x_2| + |y_1 - y_2| = 1$,则称它们是相邻的。
Alice 不喜欢当前格子的排列方式,于是她设计了一个新的排列,并希望以这个排列把谜题送给 Ibragim。你是她最聪明的朋友,她请你帮忙计算,最少需要多少次操作才能得到她想要的排列。如果无法得到,请判断并输出。
输入格式
第一行包含一个整数 $n$($1 \leq n \leq 200\,000$),表示谜题的列数。
接下来的两行描述了谜题当前的排列。每行包含 $n$ 个整数,每个整数为 $0$ 或 $1$。
最后两行以相同格式描述了 Alice 想要的排列。
输出格式
如果可以得到目标排列,输出最少需要的操作次数;否则输出 $-1$。
说明/提示
在第一个样例中,以下交换序列即可:
- $(2, 1), (1, 1)$,
- $(1, 2), (1, 3)$,
- $(2, 2), (2, 3)$,
- $(1, 4), (1, 5)$,
- $(2, 5), (2, 4)$。
可以证明 $5$ 是最少的操作次数。
在第二个样例中,无论如何交换,都无法得到目标排列,因此答案为 $-1$。
由 ChatGPT 4.1 翻译