AT_arc111_c.[ARC111C] Too Heavy

提高+/省选-

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

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

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

但是,如果某个人拿着的行李重量大于等于自己的体重,他就会感到疲劳,之后不能再参与任何操作(即不能再被选为 ii 或 jj)。特别地,如果 ai≤bpia_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

    输出#1

    3
    3 4
    1 3
    4 2
  • 输入#2

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

    输出#2

    -1
  • 输入#3

    1
    58
    998244353
    1

    输出#3

    0

说明/提示

限制

  • 1≤N≤2000001 \leq N \leq 200000
  • 1≤ai,bi≤1091 \leq a_i, b_i \leq 10^9
  • pp 是 1,…,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 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页