Universal Cup Judging System

Universal Cup

Limite de temps : 2.0 s Limite de mémoire : 2048 MB Points totaux : 100 Difficulté: [afficher] Communication
Statistiques

Questo è un problema interattivo a più passaggi (multi-pass). Ricorda di svuotare il buffer di output (flush) dopo ogni stampa. Per svuotare l'output puoi usare:

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

problem_16338_7c39b7d3e38a4987d11a56c649025d90.png
Il concetto del gioco, illustrato da ChatGPT.

Nel classico gioco di online matching (accoppiamento online), gli archi di un grafo vengono rivelati uno alla volta. Ogni volta che viene mostrato un arco, devi decidere immediatamente e irrevocabilmente se includerlo nel tuo accoppiamento. Il tuo obiettivo è assicurarti che nessuna coppia di archi scelti condivida un vertice, massimizzando al contempo il numero totale di archi selezionati.

Sei un informatico ambizioso, assetato di fama. Come ben sai, trovare un accoppiamento massimo in un contesto online è dimostratamente impossibile con alta probabilità — persino per le classi di grafi più semplici come i grafi bipartiti. Eppure, là dove gli altri vedono una barriera fondamentale, tu vedi un'opportunità di gloria. Oggi sostieni di aver risolto l'annoso problema aperto per gli alberi e sei pronto a svelare al mondo il tuo algoritmo rivoluzionario.

C'è solo un problema: ieri hai scoperto un bug nella tua dimostrazione e non hai ancora idea di come risolverlo. Non volendo rinunciare ai riflettori, decidi di trasformare la tua dimostrazione in uno spettacolo di magia: il tuo assistente, nascosto dietro le quinte, trasmetterà un piccolo suggerimento sull'intero albero con $n$ vertici prima che il gioco abbia inizio.

Il tuo piano originale era semplice: far inviare direttamente all'assistente la risposta per ciascuna richiesta di arco. A tal fine, hai installato un auricolare segreto in grado di ricevere una singola stringa binaria di lunghezza $(n - 1)$. Ma il pubblico è scettico riguardo alla tua "scoperta". Per impedire qualsiasi trucco concordato in anticipo, pretende che gli archi vengano presentati in un ordine scelto in modo uniformemente casuale — un ordine che né tu né il tuo assistente potete prevedere o controllare.

Il palco è pronto. I riflettori sono puntati su di te. Ora dimostra la tua affermazione — senza cambiare canale.

Protocollo di Interazione

La tua soluzione viene eseguita due volte su ciascun test. Nel round prepare, la tua soluzione agirà come l'assistente. Nel round play, la tua soluzione agirà come te, il mago. In entrambi i round, la tua soluzione sarà valutata come una procedura interattiva.

Round di Preparazione (Prepare Round)

La prima riga dell'input contiene la parola prepare. La seconda riga contiene un intero $n$ ($2 \le n \le 500$) — il numero di vertici. Le successive $(n - 1)$ righe contengono ciascuna due interi $u$ e $v$ ($1 \le u, v \le n$, $u < v$), che indicano un arco non orientato tra $u$ e $v$ nell'albero.

Devi stampare una riga contenente una stringa binaria $s$ di lunghezza esattamente $(n - 1)$ composta esclusivamente dai caratteri 0 e 1. Questa è la stringa trasmessa al secondo round (play). Se il tuo output non rispetta il formato richiesto, riceverai il verdetto Wrong Answer.

Round di Gioco (Play Round)

La tua soluzione verrà riavviata per il round play.

La prima riga contiene la parola play. La seconda riga contiene l'intero $n$. La terza riga contiene la stringa binaria $s$ esattamente come l'hai stampata nel round prepare.

Dopodiché, il gioco inizia con $(n - 1)$ turni. In ciascun turno verrà fornita una riga contenente due interi $u$ e $v$ ($1 \le u, v \le n$, $u < v$). Come risposta, devi stampare una riga contenente take oppure ignore. Tutti gli archi del primo round verranno forniti esattamente una volta, e l'ordine degli archi è scelto in modo uniformemente casuale tra le $(n - 1)!$ permutazioni possibili.

Qualora venga prodotto un output in un formato non valido, il gioco terminerà immediatamente senza ulteriori informazioni dall'interattore.

Valutazione della Correttezza

Sia $M$ l'insieme degli archi scelti dalla tua soluzione. È considerato accettabile se nessun vertice è incidente a più di un arco scelto e $|M| = |M^*|$, dove $M^*$ è l'accoppiamento massimo del grafo.

Ci sono esattamente $50$ test, esclusi i test di esempio. Per superare il problema, la tua soluzione deve essere corretta su tutti i test, inclusi i test di esempio.

Si garantisce che tutti i mescolamenti sono fissati prima di ricevere l'output della soluzione. La casualità è fissata per ciascun test, implementata fissando il seme (seed) di un generatore di numeri pseudocasuali.

È fornito uno strumento di test per aiutarti a sviluppare e testare la tua soluzione.

Esempio

Esempio 1, Passaggio 1

Input
prepare
3
1 2
1 3
Output
00

Esempio 1, Passaggio 2

Input
play
3
00
1 3

1 2
Output
take

ignore

Spiegazione dell'Esempio 1

Poiché $|M^*| = 1$, prendere qualsiasi arco è accettabile e il suggerimento può essere arbitrario.

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.