QOJ.ac

QOJ

実行時間制限: 1.0 s メモリ制限: 256 MB 満点: 100 ハック可能 ✓

#17673. 射撃手ティム

統計

Tim は忙しいビーバーで、体育の単位を取得するためにピストル射撃のクラスに登録し、エリート射撃手を目指しています。MIT の射撃場には $1$ から $N$ ($1 \le N \le 3 \cdot 10^5$) までの番号が振られた $N$ 個のレーンがあります。レーン $i$ には現在 $A_i$ ($0 \le A_i \le 5 \cdot 10^5$) 個の標的が一列に並んでいます。射撃場全体には少なくとも $1$ つの標的があることが保証されています。

Tim の練習用銃には弾丸が無限にあり、すべての標的を撃ち落とす必要があります。各射撃の前に、Tim はレーンを $1$ つ選び、そのレーンに向けて $1$ 発撃ちます。標的は一度当たると撃ち落とされ、二度と戻ってくることはありません。

しかし、Tim の狙いはひどいもので、奇数番目の射撃はすべてそのレーンの最初の標的に当たり、偶数番目の射撃はすべてそのレーンの最初の標的を外し、(もし存在すれば) 2 番目の標的に当たります。最初の射撃は $1$ 番目の射撃です。

Tim は、標的に当たらない射撃を行うことは許されていません。なぜなら、標的の後ろにある壁を傷つけてしまうからです。すべての標的を撃ち落とす射撃の順序を見つけるか、そのような順序が存在しないことを報告してください。

入力

各テストには複数のテストケースが含まれます。最初の行にはテストケースの数 $t$ ($1 \le t \le 1000$) が含まれます。続いて各テストケースの説明が続きます。

各テストケースは $2$ 行から構成されます。最初の行にはレーンの数 $N$ が含まれます。2 行目には各レーンの標的の数を示す $N$ 個の整数 $A_1, A_2, \dots, A_n$ がスペース区切りで含まれます。

すべてのテストケースにおける $A_i$ の合計は $5 \cdot 10^5$ を超えないことが保証されています。 すべてのテストケースにおける $N$ の合計は $3 \cdot 10^5$ を超えないことが保証されています。

出力

各テストケースについて、すべての標的を撃ち落とす射撃順序が存在する場合は "YES" を、存在しない場合は "NO" を出力してください。答えは大文字・小文字を区別しません(例: "yEs", "yes", "Yes", "YES" はすべて正解として扱われます)。

$A$ をテストケース内の $A_i$ の合計とします($A$ はテストケースごとに異なる場合があります)。そのような順序が存在する場合、次の行に $A$ 個のスペース区切りの整数 $l_1, l_2, \dots, l_A$ を出力してください。ここで $l_i$ は $i$ 番目の射撃で Wabbit が狙うべきレーンです。複数の解が存在する場合は、そのうちのいずれかを出力してください。

小課題

各小課題において、YES/NO の判定が正しく、かつ $l_i$ の値が正しくない場合、その小課題の点数の 50% を獲得できます。部分点を得るためには、各テストケースに対して正確に $A$ 個の $l_i$ を出力する必要があります。

  • (30 点): すべてのテストケースにおける $N$ の合計が 2000 を超えず、かつすべてのテストケースにおける $A_i$ の合計が 2000 を超えない。
  • (70 点): 追加の制約はない。

入出力例

入力 1

3
1
3
1
2
5
1 1 1 1 1

出力 1

YES
1 1 1
NO
NO

注記

最初のテストケースでは、3 つの標的があるレーンが 1 つだけあり、Wabbit はレーン 1 に 3 回射撃することで全ての標的を撃ち落とすことができます。標的が前から順に A, B, C である場合、1 回目の射撃で A が撃ち落とされ、2 回目の射撃で B を外して C が撃ち落とされ、最後の射撃で B が撃ち落とされます。

2 番目のテストケースでは、2 つの標的があるレーンが 1 つだけあります。レーン 1 への 1 回目の射撃は手前の標的に当たりますが、2 回目の射撃は外れてしまうため、残りの標的を撃ち落とすことはできません。したがって、このテストケースには射撃順序は存在しません。

3 番目のテストケースでは、1 つの標的があるレーンが 5 つあります。どのレーンに対しても 1 回目の射撃はそのレーンの標的に当たりますが、2 回目の射撃では他の標的に当てることができません。したがって、このテストケースには射撃順序は存在しません。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.