QOJ.ac

QOJ

Time Limit: 2 s Memory Limit: 512 MB Total points: 100

#3076. 2048 ゲーム

Statistics

とても面白いコンピュータゲームがあり、この問題もその一つに関するものかもしれません。

長さがそれぞれ 2 の冪である一次元のブロックの列が与えられます。ゲームの目的は、すべてのブロックを一つの大きなブロックに合体させることです。ブロックは一つずつ提示され、そのたびに、それまでのブロックのすぐ左またはすぐ右に接続するかを決めなければなりません。

同じ大きさの二つのブロックが隣り合うたびに、それぞれの長さの 2 倍の一つのブロックに合体します。合体してできたブロックも、可能な限り直ちに隣のブロックと合体し続けることに注意してください。例えば、現在の列が $2,4,16$ のとき、左に $2$ を接続すると $8,16$ となり、右に接続すると $2,4,16,2$ となります。どの時点でも、合体可能な組は高々一組です。

あなたはまたゲームに負けてしまい、そもそも勝つ方法があったのか気になっています。列を解析して調べてください。

入力

入力の最初の行にはテストケース数 $T$ が与えられます。その後に各テストケースの記述が続きます。

各テストケースは二行からなります。一行目には列の長さである正整数 $n\le1\,000$ が与えられます。次の行には、ブロックの長さ $n$ 個が列として与えられ、各長さは 2 の冪です。長さの総和は $2^{13}$ を超えません。

入力ファイルのサイズは 0.4 MiB を超えません。

出力

各テストケースについて、勝つことが不可能なら単語「no」を一行に出力してください。可能なら、対応するブロックを左と右のどちらに接続するかを表す、文字「l」と「r」からなる長さ $n$ の単語を出力してください。最初のブロックについてはどちらでも構いません。

入出力例

入力 1

3
9
2 8 4 1 1 4 4 4 4
5
2 16 4 8 2
3
2 2 2

出力 1

rrrlllrrr
no
no

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.