QOJ.ac

QOJ

Time Limit: 1.0 s Memory Limit: 512 MB Total points: 100 Communication

#8903. Messaggio segreto

Statistics

Questo è un problema con doppia esecuzione. Per ogni test, la vostra soluzione verrà eseguita due volte.

Durante la lezione di informatica, Алеся e Борис studiano la crittografia. I ragazzi hanno deciso di inventare un proprio metodo per cifrare i messaggi.

Алеся sceglie $k$ interi distinti da $1$ a $n$ e indica l'insieme ottenuto con $T$. Vuole trasmettere a Борис, come messaggio, l'insieme $T$ in forma cifrata. A questo scopo, a partire dall'insieme $T$, costruirà e trasmetterà a Борис un altro insieme $R$, anch'esso formato da interi da $1$ a $n$.

I ragazzi non vogliono che la dimensione del messaggio cambi dopo la cifratura, quindi anche $R$ deve contenere esattamente $k$ numeri. Inoltre, ritengono che, se $T$ e $R$ avessero anche un solo elemento in comune, la loro cifratura non sarebbe sufficientemente sicura. Non deve quindi esistere alcun numero che appartenga sia a $T$ sia a $R$: i due insiemi devono essere disgiunti. È garantito che $k\le n/2$, quindi è sempre possibile costruire almeno un insieme $R$ a partire dall'insieme $T$.

Quando Борис riceverà il messaggio cifrato $R$, dovrà decifrarlo e ottenere il messaggio originale $T$.

Aiutate Алеся e Борис a ideare e implementare gli algoritmi di cifratura e decifratura. Nella prima esecuzione il vostro programma svolgerà il ruolo di Алеся, mentre nella seconda svolgerà quello di Борис.

Input

La prima riga dell'input contiene un numero $a$, uguale a $1$ o $2$: il numero dell'esecuzione del vostro programma.

La seconda riga contiene un numero $m$, il numero di messaggi ($1\le m\le300\,000$) che il vostro programma deve cifrare nella prima esecuzione o decifrare nella seconda.

Le successive $2m$ righe descrivono $m$ messaggi, con due righe per ciascun messaggio.

La prima riga di un messaggio contiene due interi $n_i$ e $k_i$ ($2\le n_i\le10^9$, $1\le k_i\le300\,000$, $k_i\le\frac{n_i}{2}$). La seconda riga contiene $k_i$ interi distinti da $1$ a $n_i$, in ordine crescente.

È garantito che la somma di tutti i valori $k_i$ in un test non superi $300\,000$.

Se $a=1$, i numeri dati costituiscono il messaggio originale. Se $a=2$, i numeri dati sono il risultato prodotto dal vostro programma durante la prima esecuzione per cifrare un messaggio.

Output

Il programma deve stampare $m$ righe. La $i$-esima riga deve contenere $k_i$ interi distinti da $1$ a $n_i$, in ordine crescente.

Nella prima esecuzione, per ogni messaggio originale $T_i$, il programma deve stampare un insieme $R_i$ disgiunto da $T_i$.

Nella seconda esecuzione, per ogni messaggio cifrato $R_i$, il programma deve ricostruire il messaggio originale $T_i$.

Esempi

Prima esecuzione

Input 1

1
2
2 1
1
5 2
1 4

Output 1

2
2 3

Seconda esecuzione

Input 2

2
2
5 2
2 3
2 1
2

Output 2

1 4
1

Nota

Si noti che l'esempio mostra specifiche possibilità di output nella prima esecuzione e di input nella seconda. Se il vostro programma stampa un insieme $R$ diverso, anche l'input della seconda esecuzione sarà diverso.

Inoltre, nella seconda esecuzione i messaggi cifrati non vengono necessariamente forniti al programma del concorrente nello stesso ordine della prima esecuzione.

Sottoproblemi

Per indicare i vincoli aggiuntivi sull'input, denotiamo con $t_1,t_2,\ldots,t_{k_i}$ la sequenza di numeri che costituisce l'insieme $T_i$. Questi numeri sono disposti in ordine crescente.

Denotiamo con $N$ la somma dei valori $n_i$ in un test.

Denotiamo con $K$ la somma dei valori $k_i$ in un test.

Sottoproblema Punti Vincoli aggiuntivi su $n_i,N$ Vincoli aggiuntivi su $k_i,K$ Vincoli aggiuntivi su $t_j$ Sottoproblemi necessari Informazioni sulla valutazione
1 9 $N\le5\,000$ $k_i=1$ Primo errore
2 11 $N\le5\,000$ $k_i=2$ Primo errore
3 9 $N\le300\,000$ $k_i=\frac{n_i}{2}$ Primo errore
4 7 $n_i\le7$, $N\le5\,000$ Esempi Primo errore
5 9 $t_{j+1}-t_j\ge2$, $t_{k_i}\le n_i-1$ Primo errore
6 9 $t_{k_i}-t_1\le\frac{n_i}{2}-1$ Primo errore
7 10 $N \le 5000$ $t_{k_i}\le n_i-k_i$ Primo errore
8 12 $N\le100$ Esempi Primo errore
9 3 $N\le5\,000$ Esempi, 1–2, 4, 7–8 Primo errore
10 7 $N \le 300\,000$ Esempi, 1–4, 7–9 Primo errore
11 7 $K\le5\,000$ Esempi, 1–2, 4, 7–9 Primo errore
12 7 Nessun vincolo aggiuntivo Esempi, 1–11 Primo errore

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.