atcoder#ARC111C. [ARC111C] Too Heavy

[ARC111C] Too Heavy

配点 : 600600

問題文

11 から NN の番号がついた NN 人の人間と、同じく 11 から NN の番号がついた NN 個の荷物があります。 人 ii の体重は aia_i, 荷物 jj の重さは bjb_j です。 はじめ人 ii は 荷物 pip_i を持っており、以下の操作を 00 回以上繰り返すことで全ての人が自分と同じ番号の荷物を持っている状態にしたいです。

  • i,j(ij)i,j (i \neq j) を選び、人 ii と人 jj の荷物を交換する。

ただし、人は自分の体重以上の重さの荷物を持つと疲れてしまい、その後一切操作には加われません (すなわち、i,ji,jとして選べません)。 特に、 aibpia_i \leq b_{p_i} なら一度も操作に加われません。

条件を満たす操作列があるか判定し、存在するならばそのうち操作回数が最小であるものをひとつ構成してください。

制約

  • 1N2000001 \leq N \leq 200000
  • 1ai,bi1091 \leq a_i,b_i \leq 10^9
  • pp1,,N1, \ldots ,N の順列
  • 入力される数はすべて整数

入力

入力は以下の形式で標準入力から与えられる。

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

::

iKi_K jKj_K

ここで KK は操作回数であり、 it,jti_t,j_ttt 回目の操作で選んだ人間の番号である。

解が複数存在する場合、どれを出力しても構わない。

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

初期状態で人 1,2,3,41,2,3,4 が持っている荷物の重さはそれぞれ 1,3,3,51,3,3,5 なので、初期状態では誰も疲れていません。

まず人 3344 で操作をします。人 1,2,3,41,2,3,4 が持っている荷物の重さはそれぞれ 1,3,5,31,3,5,3 なので、まだ誰も疲れていません。

次に人 1133 で操作をします。人 1,2,3,41,2,3,4 が持っている荷物の重さはそれぞれ 5,3,1,35,3,1,3 なので、人 11 が疲れます。

最後に人 4422 で操作をします。人 1,2,3,41,2,3,4 が持っている荷物の重さはそれぞれ 5,3,1,35,3,1,3 なので、これで新たに疲れる人はいません。

これによって全員が正しい荷物を持っている状態になり、さらにこれは最小の操作回数なので、正しい出力の一つです。

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

条件を満たすように操作することは出来ません。

1
58
998244353
1
0

初期状態で条件を満たしています。