atcoder#ARC111C. [ARC111C] Too Heavy
[ARC111C] Too Heavy
配点 : 点
問題文
から の番号がついた 人の人間と、同じく から の番号がついた 個の荷物があります。 人 の体重は , 荷物 の重さは です。 はじめ人 は 荷物 を持っており、以下の操作を 回以上繰り返すことで全ての人が自分と同じ番号の荷物を持っている状態にしたいです。
- を選び、人 と人 の荷物を交換する。
ただし、人は自分の体重以上の重さの荷物を持つと疲れてしまい、その後一切操作には加われません (すなわち、として選べません)。 特に、 なら一度も操作に加われません。
条件を満たす操作列があるか判定し、存在するならばそのうち操作回数が最小であるものをひとつ構成してください。
制約
- は の順列
- 入力される数はすべて整数
入力
入力は以下の形式で標準入力から与えられる。
出力
どのように操作しても条件を満たせない場合、-1
を出力せよ。
条件を満たすことが可能な場合、以下のフォーマットで操作列を出力せよ。
ここで は操作回数であり、 は 回目の操作で選んだ人間の番号である。
解が複数存在する場合、どれを出力しても構わない。
4
3 4 8 6
5 3 1 3
3 4 2 1
3
3 4
1 3
4 2
初期状態で人 が持っている荷物の重さはそれぞれ なので、初期状態では誰も疲れていません。
まず人 と で操作をします。人 が持っている荷物の重さはそれぞれ なので、まだ誰も疲れていません。
次に人 と で操作をします。人 が持っている荷物の重さはそれぞれ なので、人 が疲れます。
最後に人 と で操作をします。人 が持っている荷物の重さはそれぞれ なので、これで新たに疲れる人はいません。
これによって全員が正しい荷物を持っている状態になり、さらにこれは最小の操作回数なので、正しい出力の一つです。
4
1 2 3 4
4 3 2 1
4 3 2 1
-1
条件を満たすように操作することは出来ません。
1
58
998244353
1
0
初期状態で条件を満たしています。