QOJ.ac

QOJ

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

#8903. Tajna wiadomość

Statistics

To zadanie z dwoma uruchomieniami. Dla każdego testu twoje rozwiązanie zostanie uruchomione dwukrotnie.

Na lekcji informatyki Алеся i Борис uczą się kryptografii. Postanowili wymyślić własną metodę szyfrowania wiadomości.

Алеся wybiera $k$ różnych liczb całkowitych od $1$ do $n$ i oznacza otrzymany zbiór przez $T$. Chce przekazać zbiór $T$ jako zaszyfrowaną wiadomość osobie o imieniu Борис. W tym celu na podstawie zbioru $T$ utworzy i przekaże inny zbiór $R$, również złożony z liczb całkowitych od $1$ do $n$.

Nie chcą, aby po zaszyfrowaniu rozmiar wiadomości się zmienił, więc $R$ również musi zawierać dokładnie $k$ liczb. Uważają też, że jeśli $T$ i $R$ mają choć jeden wspólny element, ich szyfrowanie nie będzie wystarczająco bezpieczne. Nie może więc istnieć liczba należąca zarówno do $T$, jak i do $R$, czyli zbiory $T$ i $R$ muszą być rozłączne. Zagwarantowano, że $k\le n/2$, dlatego na podstawie zbioru $T$ zawsze można utworzyć co najmniej jeden zbiór $R$.

Gdy Борис otrzyma zaszyfrowaną wiadomość $R$, musi ją odszyfrować i otrzymać pierwotną wiadomość $T$.

Pomóż im opracować i zaimplementować algorytmy szyfrowania oraz odszyfrowywania. Przy pierwszym uruchomieniu twój program będzie pełnił rolę osoby o imieniu Алеся, a przy drugim — osoby o imieniu Борис.

Wejście

W pierwszym wierszu wejścia znajduje się jedna liczba $a$, równa $1$ lub $2$ — numer uruchomienia twojego programu.

W drugim wierszu znajduje się jedna liczba $m$ — liczba wiadomości ($1\le m\le300\,000$), które twój program ma zaszyfrować przy pierwszym uruchomieniu lub odszyfrować przy drugim.

Następne $2m$ wierszy zawiera opisy $m$ wiadomości, po dwa wiersze na wiadomość.

W pierwszym wierszu opisu wiadomości znajdują się dwie liczby całkowite $n_i$ i $k_i$ ($2\le n_i\le10^9$, $1\le k_i\le300\,000$, $k_i\le\frac{n_i}{2}$). W drugim wierszu znajduje się $k_i$ różnych liczb całkowitych od $1$ do $n_i$, w kolejności rosnącej.

Zagwarantowano, że suma wszystkich wartości $k_i$ w jednym teście nie przekracza $300\,000$.

Jeśli $a=1$, podane liczby są pierwotną wiadomością. Jeśli $a=2$, podane liczby są wynikiem zaszyfrowania pewnej wiadomości przez twój program przy jego pierwszym uruchomieniu.

Wyjście

Program powinien wypisać $m$ wierszy. W $i$-tym wierszu powinno znaleźć się $k_i$ różnych liczb całkowitych od $1$ do $n_i$, w kolejności rosnącej.

Przy pierwszym uruchomieniu dla każdej pierwotnej wiadomości $T_i$ program powinien wypisać zbiór $R_i$, rozłączny z $T_i$.

Przy drugim uruchomieniu dla każdej zaszyfrowanej wiadomości $R_i$ program powinien odtworzyć pierwotną wiadomość $T_i$.

Przykład

Pierwsze uruchomienie

Wejście 1

1
2
2 1
1
5 2
1 4

Wyjście 1

2
2 3

Drugie uruchomienie

Wejście 2

2
2
5 2
2 3
2 1
2

Wyjście 2

1 4
1

Uwagi

Zwróć uwagę, że w przykładzie podano konkretne warianty wyjścia przy pierwszym uruchomieniu i wejścia przy drugim. Jeśli twój program wypisze inny zbiór $R$, wejście przy drugim uruchomieniu też będzie inne.

Ponadto przy drugim uruchomieniu zaszyfrowane wiadomości nie muszą być przekazane programowi uczestnika w tej samej kolejności, w jakiej występowały przy pierwszym uruchomieniu.

Podzadania

Aby określić dodatkowe ograniczenia danych wejściowych, oznaczmy ciąg liczb tworzących zbiór $T_i$ przez $t_1,t_2,\ldots,t_{k_i}$. Liczby te są uporządkowane rosnąco.

Oznaczmy sumę $n_i$ w jednym teście przez $N$.

Oznaczmy sumę $k_i$ w jednym teście przez $K$.

Podzadanie Punkty Dodatkowe ograniczenia: $n_i,N$ Dodatkowe ograniczenia: $k_i,K$ Dodatkowe ograniczenia: $t_j$ Wymagane podzadania Informacja o sprawdzaniu
1 9 $N\le5000$ $k_i=1$ Pierwszy błąd
2 11 $N\le5000$ $k_i=2$ Pierwszy błąd
3 9 $N\le300\,000$ $k_i=\frac{n_i}{2}$ Pierwszy błąd
4 7 $n_i\le7$, $N\le5000$ Przykład Pierwszy błąd
5 9 $t_{j+1}-t_j\ge2$, $t_{k_i}\le n_i-1$ Pierwszy błąd
6 9 $t_{k_i}-t_1\le\frac{n_i}{2}-1$ Pierwszy błąd
7 10 $N \le 5000$ $t_{k_i}\le n_i-k_i$ Pierwszy błąd
8 12 $N\le100$ Przykład Pierwszy błąd
9 3 $N\le5000$ Przykład, 1–2, 4, 7–8 Pierwszy błąd
10 7 $N \le 300\,000$ Przykład, 1–4, 7–9 Pierwszy błąd
11 7 $K\le5000$ Przykład, 1–2, 4, 7–9 Pierwszy błąd
12 7 Bez dodatkowych ograniczeń Przykład, 1–11 Pierwszy błąd

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.