Universal Cup Judging System

Universal Cup

Límite de tiempo: 15.0 s Límite de memoria: 2048 MB Puntuación total: 100 Dificultad: [mostrar] Interactivo Comunicación Hackeable ✓
Estadísticas

Detta är ett interaktivt problem. Kom ihåg att tömma utdatabufferten (flush) efter varje utskrift. För att tömma din utdata kan du använda:

  • fflush(stdout) eller cout.flush() i C/C++;
  • System.out.flush() i Java och Kotlin;
  • sys.stdout.flush() i Python.

problem_16334_77704ec8666e21115ab8bd1ebbcde701.png
Spelets koncept, illustrerat av Nano Banana Pro.

Du deltar i ett strategiskt turordningsbaserat spel som kallas Revolver Roulette.

Spelet börjar med en revolver laddad med exakt $6$ patroner. Varje patron är oberoende och med lika sannolikhet antingen skarp (live) eller lös (blank). Båda spelarna känner alltid till det aktuella antalet skarpa och lösa patroner som finns kvar i trumman, men den exakta ordningen är okänd.

Varje spelare börjar med $5$ hälsopoäng (HP) och $2$ föremål. Om en spelares HP sjunker till $0$ eller lägre slås spelaren ut och den andra spelaren vinner. Spelarna turas om att utföra handlingar.

Turordning

Under sin tur får den aktiva spelaren utföra valfritt antal av följande handlingar:

  • Använda vilket föremål som helst.
  • Utföra vilken skjuthandling som helst.

Turen avslutas endast när en skjuthandling gör att turen går över till den andra spelaren, eller när någon spelare slås ut.

Skjuthandlingar

Den aktiva spelaren måste välja en av följande skjuthandlingar:

  • Fire at Opponent: Den aktiva spelaren avfyrar nästa patron mot den andra spelaren. Om den är skarp förlorar den andra spelaren $1$ HP. Oavsett patrontyp går turen över till den andra spelaren.
  • Fire at Self: Den aktiva spelaren avfyrar nästa patron mot sig själv. Om den är skarp förlorar den aktiva spelaren $1$ HP och turen går över till den andra spelaren. Annars, om den är lös, behåller den aktiva spelaren turen och fortsätter att utföra handlingar.

Föremål

När ett föremål används förbrukas det, och den aktiva spelaren behåller turen oavsett föremålstyp. Föremålen är synliga för båda spelarna. När en spelare får ett nytt föremål (inklusive vart och ett av startföremålen) väljs det likformigt slumpmässigt bland följande fyra typer:

  • Dummy: Avfyra nästa patron mot en träningsdocka. Detta förbrukar patronen och räknas inte som en skjuthandling.
  • Magnifier: Kika på nästa patron för att avslöja om nästa patron är skarp eller lös. Båda spelarna får reda på resultatet.
  • Converter: Vänd på typen hos nästa patron (skarp $\leftrightarrow$ lös). Båda spelarna ser de uppdaterade antalen skarpa och lösa patroner.
  • Cage: Få en engångseffekt som förhindrar att turen tar slut vid nästa skjuthandling som normalt skulle avsluta den. Mer specifikt:

    • Om spelaren senare utför Fire at Opponent (oavsett om patronen är skarp eller lös) aktiveras effekten och turen avslutas inte.
    • Om spelaren senare utför Fire at Self och patronen är skarp aktiveras effekten och turen avslutas inte (spelaren förlorar fortfarande $1$ HP, men behåller turen).

    Effekten förbrukas omedelbart efter att den har tillämpats en gång. Högst ett Cage-föremål får användas per tur.

Omladdning (Reloading)

När trumman är tom laddas omedelbart $6$ nya patroner (var och en oberoende skarp eller lös med lika sannolikhet). Båda spelarna informeras om de nya antalen skarpa och lösa patroner. Dessutom fylls varje spelares föremål på upp till $2$ föremål (en spelare med $k$ föremål får $(2 - k)$ nya föremål, vart och ett oberoende valt likformigt slumpmässigt bland de fyra typerna ovan).

Mål

Du är spelaren som tar den första turen, och ditt mål är att vinna spelet genom att slå ut din motståndare.

Indata

Den första raden innehåller två heltal $n$ och $w$, som anger att du måste vinna minst $w$ av $n$ spel för att bli godkänd. Det finns bara tre tester:

  • Exempeltest: $n = 1$ och $w = 0$. ($0\%$)
  • Hemligt test 1: $n = 2\,000$ och $w = 1\,000$. ($50\%$)
  • Hemligt test 2: $n = 20\,000$ och $w = 11\,000$. ($55\%$)

Det kan visas att när båda spelarna spelar optimalt vinner spelaren som tar den första turen ungefär $56.89\%$ av spelen.

Interaktionsprotokoll

Spelstart

Din lösning agerar som spelaren som tar den första turen mot interaktorn. I början av varje spel skriver interaktorn ut ett heltal $g$:

  • Om $g = 0$ är alla spel i den aktuella körningen slutförda. Din lösning måste avslutas omedelbart.
  • Annars är $g$ det aktuella spelindexet ($1 \le g \le n$).

På grund av tekniska skäl körs din lösning två gånger på varje test:

  • Interaktorn kan när som helst bestämma sig för att starta om din lösning genom att ge $g = 0$.

Du kommer att få samma $n$ och $w$ vid varje körning i ett test. Därför är $n$ inte alltid lika med antalet spel i den aktuella körningen. Det garanteras att varje spel $1, \dots, n$ spelas exakt en gång över de två körningarna. Bortsett från detta kan din lösning tryggt ignorera villkoret om dubbla körningar.

Speltillstånd

Därefter skriver interaktorn ut speltillståndsraden som innehåller $13$ icke-negativa heltal:

$$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\}$: turstatus.
  • $l, b$ ($1 \le l + b \le 6$): det aktuella antalet skarpa och lösa patroner som finns kvar i trumman.
  • $h_1$ ($0 \le h_1 \le 5$): dina aktuella HP.
  • $d_1, m_1, c_1, k_1$ ($0 \le d_1 + m_1 + c_1 + k_1 \le 2$): antalet Dummy-, Magnifier-, Converter- och Cage-föremål som du för närvarande har.
  • $h_2$ ($0 \le h_2 \le 5$): din motståndares aktuella HP.
  • $d_2, m_2, c_2, k_2$ ($0 \le d_2 + m_2 + c_2 + k_2 \le 2$): antalet Dummy-, Magnifier-, Converter- och Cage-föremål som din motståndare har.

Fall $t = 0$ (Spelet är slut)

Det aktuella spelet är slut. Interaktorn går vidare till nästa spel (och skriver ut det nya $g$).

Fall $t = 1$ (Din tur)

Du måste skriva ut ett heltal för att välja en handling:

  1. Fire at Opponent.
  2. Fire at Self.
  3. Använd ett Dummy-föremål.
  4. Använd ett Magnifier-föremål.
  5. Använd ett Converter-föremål.
  6. Använd ett Cage-föremål.

Om handlingen är ogiltig (t.ex. att använda ett föremål du inte har, eller att använda ett Cage-föremål mer än en gång under samma tur) förblir speltillståndet oförändrat, och interaktorn skriver ut $0$ och samma tillståndsrad ($13$ heltal) igen. Även om det fortfarande är din tur måste du utföra en annan giltig handling för att gå vidare i spelet.

Annars verkställs handlingen och interaktorn skriver ut ett resultatheltal:

  • För handlingarna $1$–$5$: Returnerar $1$ om nästa patron före handlingen är skarp, $2$ om den är lös.
  • För handling $6$: Returnerar $1$ (ingen patroninformation avslöjas).

Interaktorn skriver sedan ut den uppdaterade speltillståndsraden.

Fall $t = 2$ (Motståndarens tur)

Interaktorn simulerar din motståndares handling och skriver ut två rader:

  • Handlings-ID $a \in \{1, \dots, 6\}$.
  • Resultatheltalet ($1$ eller $2$ enligt beskrivningen ovan).

Din motståndare utför aldrig en otillåten handling. Omedelbart därefter skriver interaktorn ut nästa speltillståndsrad ($13$ heltal).

För varje runda i spelet använder spelsimulatorn en pseudoslumptalsgenerator med ett fixerat slumpfrö (seed). Dessutom använder motståndaren i interaktorn en deterministisk strategi. Beslutet att starta om din lösning är oberoende av interaktionsproceduren. Därför leder samma följd av handlingar alltid till samma speltillstånd.

Ett testverktyg tillhandahålls för att hjälpa dig att utveckla och testa din lösning.

Exempel

Exempel 1, Omgång 1

Indata
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
Utdata


6


1


6


2


1








1








4


1

Exempel 1, Omgång 2

Indata
1 0
0
Utdata
		

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.