#ATarc111c. [ARC111C] Too Heavy

[ARC111C] Too Heavy

题目描述

NN 个人,编号为 11NN,以及 NN 个编号同样为 11NN 的行李。第 ii 个人的体重为 aia_i,第 jj 个行李的重量为 bjb_j。一开始,第 ii 个人拿着编号为 pip_i 的行李。你可以进行如下操作若干次(可以为 00 次),使得最终每个人都拿着与自己编号相同的行李。

  • 选择 i,j (ij)i, j\ (i \neq j),交换第 ii 个人和第 jj 个人手中的行李。

但是,如果某个人拿着的行李重量大于等于自己的体重,他就会感到疲劳,之后不能再参与任何操作(即不能再被选为 iijj)。特别地,如果 aibpia_i \leq b_{p_i},那么这个人一开始就无法参与任何操作。

请判断是否存在满足条件的操作序列。如果存在,请构造一个操作次数最少的方案。

输入格式

输入为标准输入,格式如下:

NN a1a_1 a2a_2 \ldots aNa_N b1b_1 b2b_2 \ldots bNb_N p1p_1 p2p_2 \ldots pNp_N

输出格式

如果无论如何都无法满足条件,输出 -1。如果可以满足条件,请输出如下格式的操作序列:

KK i1i_1 j1j_1 i2i_2 j2j_2 \ldots iKi_K jKj_K

其中 KK 为操作次数,it,jti_t, j_t 表示第 tt 次操作选择的两个人的编号。

如果有多种方案,输出任意一种均可。

样例 1

输入

4
3 4 8 6
5 3 1 3
3 4 2 1

输出

3
3 4
1 3
4 2

样例 2

输入

4
1 2 3 4
4 3 2 1
4 3 2 1

输出

-1

样例 3

输入

1
58
998244353
1

输出

0

说明/提示

限制

  • 1N2000001 \leq N \leq 200000
  • 1ai,bi1091 \leq a_i, b_i \leq 10^9
  • pp1,,N1, \ldots, N 的一个排列
  • 输入的所有数均为整数

样例解释 1

初始状态下,第 1,2,3,41,2,3,4 个人拿着的行李重量分别为 1,3,3,51,3,3,5,所以一开始没有人疲劳。首先让第 33 个人和第 44 个人交换行李,此时 1,2,3,41,2,3,4 号人的行李重量分别为 1,3,5,31,3,5,3,仍然没有人疲劳。接着让第 11 个人和第 33 个人交换行李,此时 1,2,3,41,2,3,4 号人的行李重量分别为 5,3,1,35,3,1,3,此时第 11 个人疲劳。最后让第 44 个人和第 22 个人交换行李,此时 1,2,3,41,2,3,4 号人的行李重量分别为 5,3,1,35,3,1,3,没有新增疲劳的人。这样所有人都拿到了正确的行李,并且操作次数最少,因此这是一个正确的输出。

样例解释 2

无法通过任何操作满足条件。

样例解释 3

初始状态下已经满足条件。

由 ChatGPT 4.1 翻译