Universal Cup Judging System

Universal Cup

时间限制: 1.0 s 内存限制: 256 MB 总分: 100 可 Hack ✓
统计

Zwerg Franek hat schon immer alle Arten von Spielen geliebt. Eines Tages durchstöberte er auf dem Dachboden die Sachen seines Vaters und fand eine alte Konsole mit etwas, das wie ein Tetris-Spiel aussah. Obwohl es dem bekannten Spiel ähnelte, waren einige der Regeln anders.

Das Spiel wird auf einem anfangs leeren Spielfeld der Breite $10$ und unbegrenzter Höhe gespielt. Die Spielsteine fallen einzeln nacheinander von oben herab, genau in der in der Eingabe angegebenen Reihenfolge.

Es gibt nur zwei Arten von Spielsteinen:

  • Den I-Stein, geformt wie ein vertikaler Balken der Höhe $4$ und Breite $1$.
  • Den O-Stein, geformt wie ein ausgefülltes Quadrat der Höhe $2$ und Breite $2$.

Wenn ein Spielstein erscheint, muss Franek wählen, wo er ihn fallen lässt:

  • Ein I-Stein kann in jede beliebige der $10$ Spalten fallen gelassen werden.
  • Ein O-Stein kann so fallen gelassen werden, dass seine beiden Spalten vollständig in das Spielfeld passen (d. h. beginnend bei einer beliebigen Spalte von $1$ bis $9$).

Sobald ein Spielstein zu fallen beginnt, sinkt er senkrecht nach unten, bis er auf bereits vorhandenen Blöcken oder auf dem Boden des Spielfelds landet. Spielsteine können nicht gedreht, in der Luft seitwärts bewegt oder in Teile zerlegt werden. Nachdem der Spielstein gelandet ist, werden alle Felder, die er bedeckt, gefüllt.

Immer wenn eine horizontale Reihe des Spielfelds vollständig mit Blöcken gefüllt wird (was bedeutet, dass alle $10$ Spalten in dieser Höhe einen Block haben), verschwindet diese Reihe. Alle Blöcke darüber bewegen sich um eine Einheit nach unten. Wenn mehrere Reihen gleichzeitig vervollständigt werden, verschwinden sie alle zusammen.

Man erzielt einen Tetris, wann immer genau vier Reihen gleichzeitig verschwinden. Das Ziel des Spiels ist es, so viele Tetrises wie möglich zu erzielen.

problem_16004_1.png

Das erste Spielfeld zeigt eine Beispielkonfiguration von Spielsteinen. Nachdem ein I-Stein in die $8$-te Spalte fallen gelassen wurde, beginnt er zu fallen, wie im zweiten und dritten Spielfeld gezeigt. Danach verschwinden die unteren vier Reihen, was einen Tetris einbringt und zum vierten Spielfeld führt.

Da Franek ein ehrgeiziger kleiner Zwerg ist, möchte er die maximale Punktzahl erreichen! Allerdings ist er nicht gut genug in dem Spiel, also musst du ihm helfen. Da du die Reihenfolge der Spielsteine im Voraus kennst, hilf Franek dabei, die maximale Anzahl an Tetrises zu bestimmen, die er bei optimalem Spiel erreichen kann. Gib außerdem eine Zugfolge an, die diese Punktzahl erreicht.

Eingabe

Die erste Zeile enthält eine einzige ganze Zahl $N$, die Anzahl der Spielsteine. Die zweite Zeile enthält einen String der Länge $N$, der nur aus den Zeichen I und O besteht und die Reihenfolge der Spielsteine vom ersten bis zum letzten beschreibt.

Ausgabe

Gib in der ersten Zeile eine einzige ganze Zahl aus, welche die maximale Anzahl an Tetrises darstellt, die Franek erreichen kann. Gib in der zweiten Zeile eine Folge von $N$ ganzen Zahlen $c_1, c_2, \dots, c_N$ aus, wobei $c_i$ die Spalte ist, in die der $i$-te Spielstein fallen gelassen werden soll ($1$-indexiert). Für einen I-Stein muss $c_i$ die Bedingung $1 \le c_i \le 10$ erfüllen. Für einen O-Stein bezieht sich $c_i$ auf seine linke Spalte und muss $1 \le c_i \le 9$ erfüllen.

Wenn es mehrere optimale Folgen gibt, kannst du eine beliebige davon ausgeben.

Einschränkungen

$1 \le N \le 200\,000$.

Beispiele

Eingabe 1

10
IIOIOIOOII

Ausgabe 1

1
1 2 3 5 3 6 7 7 9 10

Hinweis

Die gezeigte Ausgabe ist nur eine gültige Zugfolge; andere Folgen können ebenfalls dieselbe maximale Anzahl an Tetrises erreichen.

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.