Universal Cup Judging System

Universal Cup

حد الوقت: 15.0 s حد الذاكرة: 2048 MB مجموع النقاط: 100 الصعوبة: [عرض] تفاعلية تواصل قابلة للهجوم ✓
الإحصائيات

Dies ist ein interaktives Problem. Denken Sie daran, nach jeder Ausgabe den Ausgabepuffer zu leeren (flushen). Zum Leeren Ihrer Ausgabe können Sie Folgendes verwenden:

  • fflush(stdout) oder cout.flush() in C/C++;
  • System.out.flush() in Java und Kotlin;
  • sys.stdout.flush() in Python.

problem_16334_77704ec8666e21115ab8bd1ebbcde701.png
Das Konzept des Spiels, illustriert von Nano Banana Pro.

Sie nehmen an einem strategischen rundenbasierten Spiel namens Revolver Roulette teil.

Das Spiel beginnt mit einem Revolver, der mit genau $6$ Patronen geladen ist. Jede Patrone ist unabhängig und mit gleicher Wahrscheinlichkeit entweder scharf (live) oder eine Platzpatrone (blank). Beide Spieler kennen jederzeit die aktuelle Anzahl der in der Trommel verbleibenden scharfen Patronen und Platzpatronen, aber die genaue Reihenfolge ist unbekannt.

Jeder Spieler beginnt mit $5$ Lebenspunkten (HP) und $2$ Gegenständen. Fallen die HP eines Spielers auf $0$ oder darunter, scheidet er aus und der andere Spieler gewinnt. Die Spieler führen abwechselnd Aktionen aus.

Zugablauf

Während seines Zuges darf der aktive Spieler beliebig viele der folgenden Aktionen ausführen:

  • Einen beliebigen Gegenstand benutzen.
  • Eine beliebige Schussaktion ausführen.

Der Zug endet erst, wenn eine Schussaktion dazu führt, dass der Zug an den anderen Spieler übergeht, oder wenn ein Spieler ausscheidet.

Schussaktionen

Der aktive Spieler muss eine der folgenden Schussaktionen wählen:

  • Fire at Opponent: Der aktive Spieler feuert die nächste Patrone auf den anderen Spieler ab. Ist sie scharf, verliert der andere Spieler $1$ HP. Unabhängig vom Patronentyp geht der Zug an den anderen Spieler über.
  • Fire at Self: Der aktive Spieler feuert die nächste Patrone auf sich selbst ab. Ist sie scharf, verliert der aktive Spieler $1$ HP und der Zug geht an den anderen Spieler über. Andernfalls, wenn es sich um eine Platzpatrone handelt, behält der aktive Spieler den Zug und führt weiterhin Aktionen aus.

Gegenstände

Wenn ein Gegenstand benutzt wird, wird er verbraucht und der aktive Spieler behält den Zug, unabhängig vom Gegenstandstyp. Gegenstände sind für beide Spieler sichtbar. Wenn ein Spieler einen neuen Gegenstand erhält (einschließlich jedes der Startgegenstände), wird dieser gleichverteilt zufällig aus den folgenden vier Typen ausgewählt:

  • Dummy: Feuert die nächste Patrone auf eine Trainingspuppe ab. Dies verbraucht die Patrone und gilt nicht als Schussaktion.
  • Magnifier: Inspiziert die nächste Patrone, um aufzudecken, ob sie scharf oder eine Platzpatrone ist. Beide Spieler erfahren das Ergebnis.
  • Converter: Kehrt den Typ der nächsten Patrone um (scharf $\leftrightarrow$ Platzpatrone). Beide Spieler sehen die aktualisierten Anzahlen der scharfen Patronen und Platzpatronen.
  • Cage: Gewährt einen einmaligen Effekt, der verhindert, dass der Zug bei der nächsten Schussaktion endet, die ihn normalerweise beenden würde. Im Einzelnen:

    • Wenn der Spieler später Fire at Opponent ausführt (unabhängig davon, ob die Patrone scharf oder eine Platzpatrone ist), tritt der Effekt in Kraft und der Zug endet nicht.
    • Wenn der Spieler später Fire at Self ausführt und die Patrone scharf ist, tritt der Effekt in Kraft und der Zug endet nicht (der Spieler verliert dennoch $1$ HP, behält aber den Zug).

    Der Effekt wird sofort verbraucht, nachdem er einmal angewendet wurde. Pro Zug darf höchstens ein Cage-Gegenstand benutzt werden.

Nachladen (Reloading)

Wenn die Trommel leer ist, werden sofort $6$ neue Patronen geladen (jede unabhängig mit gleicher Wahrscheinlichkeit scharf oder Platzpatrone). Beide Spieler werden über die neuen Anzahlen an scharfen Patronen und Platzpatronen informiert. Zusätzlich werden die Gegenstände jedes Spielers auf bis zu $2$ Gegenstände aufgefüllt (ein Spieler mit $k$ Gegenständen erhält $(2 - k)$ neue Gegenstände, die jeweils unabhängig und gleichverteilt zufällig aus den oben genannten vier Typen gewählt werden).

Ziel

Sie sind der Spieler, der den ersten Zug macht, und Ihr Ziel ist es, das Spiel durch Ausschalten Ihres Gegners zu gewinnen.

Eingabe

Die erste Zeile enthält zwei ganze Zahlen $n$ und $w$, die angeben, dass Sie mindestens $w$ von $n$ Spielen gewinnen müssen, damit Ihre Lösung akzeptiert wird. Es gibt nur drei Tests:

  • Beispieltest: $n = 1$ und $w = 0$. ($0\%$)
  • Geheimtest 1: $n = 2\,000$ und $w = 1\,000$. ($50\%$)
  • Geheimtest 2: $n = 20\,000$ und $w = 11\,000$. ($55\%$)

Es lässt sich zeigen, dass der Spieler, der den ersten Zug macht, bei optimalem Spiel beider Seiten etwa $56.89\%$ der Spiele gewinnt.

Interaktionsprotokoll

Spielstart

Ihre Lösung agiert als der Spieler, der gegen den Interaktor den ersten Zug macht. Zu Beginn jedes Spiels gibt der Interaktor eine ganze Zahl $g$ aus:

  • Wenn $g = 0$ ist, sind alle Spiele im aktuellen Durchlauf abgeschlossen. Ihre Lösung muss sich sofort beenden.
  • Andernfalls ist $g$ der aktuelle Spielindex ($1 \le g \le n$).

Aufgrund technischer Gegebenheiten wird Ihre Lösung bei jedem Test zweimal ausgeführt:

  • Der Interaktor kann jederzeit entscheiden, Ihre Lösung neu zu starten, indem er $g = 0$ übergibt.

Sie erhalten bei jedem Durchlauf eines Tests dieselben Werte für $n$ und $w$. Daher ist $n$ nicht immer gleich der Anzahl der Spiele im aktuellen Durchlauf. Es wird garantiert, dass jedes Spiel $1, \dots, n$ über die beiden Durchläufe hinweg genau einmal gespielt wird. Abgesehen davon kann Ihre Lösung die Bedingung der zweimaligen Ausführung gefahrlos ignorieren.

Spielzustand

Anschließend gibt der Interaktor die Spielzustandszeile mit $13$ nichtnegativen ganzen Zahlen aus:

$$t \quad l \quad b \quad h_1 \quad d_1 \quad m_1 \quad c_1 \quad k_1 \quad h_2 \quad d_2 \quad m_2 \quad c_2 \quad k_2$$

  • $t \in \{0, 1, 2\}$: Zugstatus.
  • $l, b$ ($1 \le l + b \le 6$): die aktuelle Anzahl der in der Trommel verbleibenden scharfen Patronen und Platzpatronen.
  • $h_1$ ($0 \le h_1 \le 5$): Ihre aktuellen HP.
  • $d_1, m_1, c_1, k_1$ ($0 \le d_1 + m_1 + c_1 + k_1 \le 2$): die Anzahl der Gegenstände Dummy, Magnifier, Converter und Cage, die Sie aktuell besitzen.
  • $h_2$ ($0 \le h_2 \le 5$): die aktuellen HP Ihres Gegners.
  • $d_2, m_2, c_2, k_2$ ($0 \le d_2 + m_2 + c_2 + k_2 \le 2$): die Anzahl der Gegenstände Dummy, Magnifier, Converter und Cage, die Ihr Gegner besitzt.

Fall $t = 0$ (Spielende)

Das aktuelle Spiel ist beendet. Der Interaktor fährt mit dem nächsten Spiel fort (und gibt das neue $g$ aus).

Fall $t = 1$ (Ihr Zug)

Sie müssen eine ganze Zahl ausgeben, um eine Aktion zu wählen:

  1. Fire at Opponent.
  2. Fire at Self.
  3. Einen Dummy-Gegenstand benutzen.
  4. Einen Magnifier-Gegenstand benutzen.
  5. Einen Converter-Gegenstand benutzen.
  6. Einen Cage-Gegenstand benutzen.

Wenn die Aktion ungültig ist (z. B. das Benutzen eines Gegenstands, den Sie nicht besitzen, oder das mehrmalige Benutzen eines Cage-Gegenstands im selben Zug), bleibt der Spielzustand unverändert, und der Interaktor gibt $0$ sowie dieselbe Zustandszeile ($13$ ganze Zahlen) erneut aus. Obwohl Sie weiterhin am Zug sind, müssen Sie eine andere gültige Aktion ausführen, um das Spiel fortzusetzen.

Andernfalls ist die Aktion wirksam und der Interaktor gibt eine Ergebniszahl aus:

  • Für die Aktionen $1$–$5$: Gibt $1$ zurück, wenn die nächste Patrone vor der Aktion scharf ist, und $2$, wenn sie eine Platzpatrone ist.
  • Für Aktion $6$: Gibt $1$ zurück (keine Patroneninformation aufgedeckt).

Der Interaktor gibt anschließend die aktualisierte Spielzustandszeile aus.

Fall $t = 2$ (Zug des Gegners)

Der Interaktor simuliert die Aktion Ihres Gegners und gibt zwei Zeilen aus:

  • Die Aktions-ID $a \in \{1, \dots, 6\}$.
  • Die Ergebniszahl ($1$ oder $2$ wie oben beschrieben).

Ihr Gegner führt niemals eine ungültige Aktion aus. Unmittelbar danach gibt der Interaktor die nächste Spielzustandszeile ($13$ ganze Zahlen) aus.

Für jede Spielrunde verwendet der Spielsimulator einen Pseudozufallszahlengenerator mit einem festen Zufalls-Seed. Zudem verfolgt der Gegner im Interaktor eine deterministische Strategie. Die Entscheidung, Ihre Lösung neu zu starten, ist unabhängig vom Interaktionsverlauf. Daher führt dieselbe Folge von Aktionen immer zum selben Spielzustand.

Ein Testwerkzeug wird bereitgestellt, um Ihnen bei der Entwicklung und beim Testen Ihrer Lösung zu helfen.

Beispiel

Beispiel 1, Durchgang 1

Eingabe
1 0
1
1 3 3 5 0 0 0 2 5 1 0 1 0

1
1 3 3 5 0 0 0 1 5 1 0 1 0

1
1 2 3 5 0 0 0 1 4 1 0 1 0

0
1 2 3 5 0 0 0 1 4 1 0 1 0

2
1 2 2 5 0 0 0 1 4 1 0 1 0

1
2 1 2 5 0 0 0 1 3 1 0 1 0
5
2
2 2 1 5 0 0 0 1 3 1 0 0 0
1
1
1 1 1 4 0 0 0 1 3 1 0 0 0

1
2 0 1 4 0 0 0 1 2 1 0 0 0
3
2
2 2 4 4 0 1 0 1 2 0 1 0 1
2
1
1 1 4 4 0 1 0 1 1 0 1 0 1

1
1 1 4 4 0 0 0 1 1 0 1 0 1

1
0 0 4 4 0 0 0 1 0 0 1 0 1
0
Ausgabe


6


1


6


2


1








1








4


1

Beispiel 1, Durchgang 2

Eingabe
1 0
0
Ausgabe
		

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.