QOJ.ac

QOJ

حد الوقت: 1.0 s حد الذاكرة: 512 MB مجموع النقاط: 100

#17601. POKVARENI

الإحصائيات

Dawno temu, przedszkolanka zabrała dzieci do parku na zabawę w głuchy telefon. Każde z $N$ dzieci zna ten sam zbiór $M$ słów, które oznaczymy liczbami od $1$ do $M$. Gra przebiega w następujący sposób: przedszkolanka ustawia dzieci w szeregu i szepcze pierwszemu dziecku słowo numer $1$. Następnie pierwsze dziecko szepcze usłyszane słowo drugiemu dziecku, drugie dziecko szepcze usłyszane słowo trzeciemu i tak dalej, aż do ostatniego dziecka. Wtedy ostatnie dziecko wypowiada na głos słowo, które usłyszało.

Ponieważ młodzi informatycy głośno kodowali w pobliskim stowarzyszeniu, dzieci nie mogły się skoncentrować na grze i często słyszały słowo zupełnie inne od tego, które im wyszeptano. Wiadomo jednak, co następuje: dane dziecko zawsze usłyszy dane słowo w ten sam sposób, tzn. jeśli dziecku $D$ wyszeptano słowo $A$, przekaże ono dalej (lub wypowie na głos, jeśli jest ostatnie w szeregu) zawsze to samo słowo, niezależnie od tego, gdzie znajduje się w szeregu lub kto wyszeptał mu słowo $A$.

Aby urozmaicić zabawę, przedszkolanka postanowiła przeprowadzić eksperyment: powtórzyła tę grę $N!$ razy, po jednym razie dla każdej możliwej kolejności dzieci. Zauważyła, że istnieje słowo, które dokładnie $K$ razy pojawiło się jako słowo wypowiedziane na głos przez ostatnie dziecko. Jest ciekawa, jak to możliwe i prosi o zrekonstruowanie takiej sytuacji.

Dane są liczby $N$ i $K$. Określ wielkość słownika $M$ oraz słowo $X$ ($1 \le X \le M$) z tego słownika, a dla każdego z $N$ dzieci i każdego z $M$ słów określ słowo, które to dziecko przekaże dalej, jeśli usłyszy dane słowo, tak aby wybrane słowo $X$ było wypowiadane na głos przez ostatnie dziecko w dokładnie $K$ (z łącznej liczby $N!$) ustawieniach. Twoje rozwiązanie jest oceniane w zależności od wielkości wybranego słownika, przy czym mniejszy słownik daje więcej punktów. Szczegóły znajdują się w sekcji Podzadania.

Wejście

W pierwszym wierszu podano numer podzadania $P$ ($1 \le P \le 2$) z sekcji Podzadania, a w drugim wierszu liczbę scenariuszy testowych $T$ ($1 \le T \le 10$). Scenariusze są od siebie niezależne, tzn. jest to kilka przypadków testowych w jednym pliku wejściowym.

W każdym z kolejnych $T$ wierszy znajdują się dwie liczby całkowite $N$ i $K$ ($1 \le N \le 12$, $0 \le K \le N!$), odpowiadające jednemu scenariuszowi testowemu.

Wyjście

Dla każdego z $T$ scenariuszy w pierwszym wierszu wypisz dwie liczby: $M$ i $X$ ($1 \le X \le M \le 10\,000$), wielkość słownika oraz słowo, które ostatnie dziecko wypowiedziało w $K$ grach. W kolejnych $N$ wierszach wypisz po $M$ liczb: $j$-ta liczba w $i$-tym z tych wierszy oznacza słowo, które $i$-te dziecko przekaże dalej, jeśli wyszeptano mu słowo $j$.

Podzadania

Przypadki testowe podzielono na dwa podzadania. Jeśli twój program jest niepoprawny dla któregokolwiek z przykładów, otrzymasz 0 punktów za to podzadanie.

Podzadanie 1 jest warte łącznie 30 punktów i obowiązuje w nim $1 \le N \le 7$. W tym podzadaniu można uzyskać 0 lub wszystkie punkty. Pod warunkiem, że program jest poprawny dla wszystkich przykładów, jedynym dodatkowym warunkiem jest $M \le 10\,000$.

Podzadanie 2 jest warte łącznie 70 punktów i obowiązuje w nim $1 \le N \le 12$. W tym podzadaniu można uzyskać punkty częściowe. Dla każdego scenariusza każdego przykładu wyznaczana jest liczba punktów zdobytych przez twój algorytm. Twój algorytm otrzyma $70 \cdot B$ punktów, gdzie $B$ to minimalna liczba punktów ze wszystkich scenariuszy w podzadaniu. Punkty za pojedynczy scenariusz $B_S$ oblicza się w następujący sposób:

  • jeśli $M \le N + 1$, to $B_S = 1$
  • w przeciwnym razie, jeśli $M \le N + 5$, to $B_S = 0.7 + 0.15 / (M - N - 1)$ (obowiązuje $0.7 \le B_S \le 0.85$)
  • w przeciwnym razie, jeśli $M \le 5N$, to $B_S = 0.5 + 0.05 \cdot (5 - M/N)$ (obowiązuje $0.5 \le B_S \le 0.7$)
  • w przeciwnym razie, jeśli $M \le 10\,000$, to $B_S = 0.5 / (\log_{10}(M / 5N) + 1)$ (obowiązuje $0.0 \le B_S \le 0.5$)

Przykład

Wejście 1

1
2
3 2
2 1

Wyjście 1

3 3
2 1 3
3 2 2
1 3 2
2 1
1 1
2 2

Wejście 2

2
2
3 3
4 0

Wyjście 2

6 2
1 2 3 4 5 6
6 5 4 3 2 1
2 4 1 4 3 2
2 2
1 1
1 1
1 1
1 1

Uwagi

Wyjaśnienie pierwszego przykładu: w pierwszej grze, jeśli kolejność dzieci to $(1, 2, 3)$, wydarzy się następujące: przedszkolanka szepcze pierwszemu dziecku słowo $1$. Ono szepcze drugiemu dziecku słowo $2$. Drugie dziecko szepcze trzeciemu dziecku słowo $2$, a ono wypowiada na głos słowo $3$. Drugą odpowiednią kolejnością dzieci jest $(3, 2, 1)$, dla której wypowiedziane słowa to kolejno $1$ (przedszkolanka), $1$ (dziecko nr $3$), $3$ (dziecko nr $2$), $3$ (dziecko nr $1$). Dla pozostałych czterech ustawień ostatnie dziecko wypowiada słowo inne niż $3$.

Wyjaśnienie drugiego przykładu: jest to przykład z drugiego podzadania, które posiada punktację częściową. Dla pierwszego scenariusza zachodzi $N + 1 < M \le N + 5$, więc wynik wynosi $0.77$ (zaokrąglone do dwóch miejsc po przecinku). Dla drugiego scenariusza zachodzi $M \le N + 1$, więc wynik wynosi $1$. Ponieważ bierze się minimum ze wszystkich scenariuszy testowych, to rozwiązanie otrzymałoby $0.77$ całkowitej liczby punktów za ten przykład.

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.