#P15686. [ICPC 2023 Jakarta R] Merge Not Sort

[ICPC 2023 Jakarta R] Merge Not Sort

说明

你正在研究归并排序算法。归并排序是一种基于分治思想的排序算法。它通过将一个数组分成两个长度相等的子数组,分别对每个子数组进行排序,然后将已排序的子数组合并,最终形成排序后的数组。

你对归并过程特别感兴趣。常见的归并实现方法是:通过迭代比较两个子数组的首元素,将较小的元素移动到新的合并数组中。更准确地说,归并算法可以用如下伪代码表示:

    Merge(A[1..N], B[1..N]):
        C = []
        i = 1
        j = 1
        while i <= N AND j <= N:
            if A[i] < B[j]:
                append A[i] to C
                i = i + 1
            else:
                append B[j] to C
                j = j + 1 
        while i <= N:
            append A[i] to C
            i = i + 1 
        while j <= N:
            append B[j] to C
            j = j + 1 
        return C

在你的研究过程中,你希望了解当数组 AABB 不一定有序时归并算法的行为。例如,如果 A=[3,1,6]A = [3, 1, 6]B=[4,5,2]B = [4, 5, 2],那么 Merge(A,B)=[3,1,4,5,2,6]\text{Merge}(A, B) = [3, 1, 4, 5, 2, 6]

为了进一步加深对归并算法的理解,你决定研究如下问题。给定一个长度为 2N2 \cdot N 的数组 CC,其中 CC112N2 \cdot N 的一个排列。请构造任意两个长度为 NN 的数组 AABB,使得 Merge(A,B)=C\text{Merge}(A, B) = C,或者判断是否无法做到。

输入格式

第一行包含一个整数 NN1N10001 \leq N \leq 1000)。

第二行包含 2N2 \cdot N 个整数 CiC_i。数组 CC112N2 \cdot N 的一个排列。

输出格式

如果无法构造出满足条件的两个长度为 NN 的数组 AABB,使得 Merge(A,B)=C\text{Merge}(A, B) = C,则输出 1-1

否则,输出数组 AABB,每行一个数组,均包含 NN 个整数。如果有多组答案,输出任意一组均可。

3
3 1 4 5 2 6
3 1 6
4 5 2
4
1 2 3 4 5 6 7 8
2 3 5 7
1 4 6 8
2
4 3 2 1
-1

提示

样例输入输出 #1 说明

A=[3,1,4]A = [3, 1, 4]B=[5,2,6]B = [5, 2, 6] 也是正确答案。

样例输入输出 #2 说明

A=[1,2,3,4]A = [1, 2, 3, 4]B=[5,6,7,8]B = [5, 6, 7, 8] 也是正确答案。

由 ChatGPT 4.1 翻译