QOJ.ac

QOJ

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

#17601. POKVARENI

الإحصائيات

Однажды воспитательница детского сада повела детей в парк играть в «испорченный телефон». У каждого из $N$ детей есть один и тот же набор из $M$ слов, которые мы обозначим числами от 1 до $M$. Игра проходит следующим образом: воспитательница выстраивает детей в ряд и шепчет первому ребенку слово под номером 1. После этого первый ребенок шепчет второму ребенку слово, которое он услышал, затем второй ребенок шепчет третьему то, что услышал, и так далее до последнего ребенка. В конце последний ребенок громко произносит слово, которое он услышал.

Поскольку в тот день молодые программисты беззастенчиво громко кодировали в соседнем союзе, дети не могли сосредоточиться на игре и часто слышали совсем не то слово, которое им шептали. Однако известно следующее: определенный ребенок всегда будет слышать определенное слово одинаково, то есть если ребенку $D$ прошептали слово $A$, он всегда передаст дальше (или произнесет вслух, если он последний в ряду) одно и то же слово, независимо от того, где он находится в ряду и кто именно прошептал ему слово $A$.

Чтобы развлечься, воспитательница решила провести эксперимент: она повторила эту игру $N!$ раз, по одному разу для каждого возможного порядка детей. Она заметила, что существует слово, которое ровно $K$ раз оказалось словом, произнесенным последним ребенком вслух. Ей интересно, как это возможно, и она попросила вас реконструировать такую ситуацию.

Даны числа $N$ и $K$. Определите размер словаря $M$ и слово $X$ ($1 \le X \le M$) из этого словаря, а также для каждого из $N$ детей и каждого из $M$ слов определите слово, которое этот ребенок передаст дальше, если услышит данное слово, так чтобы выбранное слово $X$ последний ребенок в ряду произносил вслух ровно в $K$ (из общего числа $N!$) порядках. Ваше решение оценивается в зависимости от размера выбранного словаря: меньший словарь приносит больше баллов.

Подробности смотрите в разделе «Бонусы».

Входные данные

В первой строке дано число подзадачи $P$ ($1 \le P \le 2$) из раздела «Бонусы», а во второй строке — количество тестовых сценариев $T$ ($1 \le T \le 10$). Сценарии независимы друг от друга, то есть речь идет о нескольких тестовых примерах в одном входном файле.

В каждой из следующих $T$ строк содержатся два целых числа $N$ и $K$ ($1 \le N \le 12$, $0 \le K \le N!$), соответствующих одному тестовому сценарию.

Выходные данные

Для каждого из $T$ сценариев в первой строке выведите два числа: $M$ и $X$ ($1 \le X \le M \le 10\,000$), размер словаря и слово, которое последний ребенок произнес в $K$ играх. В следующих $N$ строках выведите по $M$ чисел: $j$-е число в $i$-й из этих строк обозначает слово, которое $i$-й ребенок передаст дальше, если ему прошептали слово $j$.

Бонусы

Тестовые примеры разделены на две подзадачи, внимательно прочитайте описание каждой. Если ваша программа неверна на любом из примеров, вы получите 0 баллов за эту подзадачу.

Подзадача 1 оценивается в 30 баллов, в ней $1 \le N \le 7$. Для этой подзадачи можно получить либо 0, либо все баллы. При условии, что ваша программа верна на всех примерах, единственным дополнительным условием является $M \le 10\,000$.

Подзадача 2 оценивается в 70 баллов, в ней $1 \le N \le 12$. Для этой подзадачи можно получить частичные баллы. Для каждого сценария каждого примера определяется количество баллов, которое набрал ваш алгоритм. Ваш алгоритм получит $70 \cdot B$ баллов, где $B$ — минимальное количество баллов по всем сценариям в подзадаче. Баллы за отдельный сценарий $B_S$ рассчитываются следующим образом:

  • если $M \le N + 1$, то $B_S = 1$
  • иначе, если $M \le N + 5$, то $B_S = 0.7 + 0.15 / (M - N - 1)$ (при этом $0.7 \le B_S \le 0.85$)
  • иначе, если $M \le 5N$, то $B_S = 0.5 + 0.05 \cdot (5 - M/N)$ (при этом $0.5 \le B_S \le 0.7$)
  • иначе, если $M \le 10\,000$, то $B_S = 0.5 / (\log_{10}(M / 5N) + 1)$ (при этом $0.0 \le B_S \le 0.5$)

Примеры

Входные данные 1

1
2
3 2
2 1

Выходные данные 1

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

Примечание 1

Пояснение к первому примеру: в первой игре, если порядок детей $(1, 2, 3)$, произойдет следующее: воспитательница шепчет первому ребенку слово 1. Он шепчет второму ребенку слово 2. Второй ребенок шепчет третьему ребенку слово 2, и тот произносит вслух слово 3. Другой подходящий порядок детей — $(3, 2, 1)$, для которого произнесены слова по порядку: 1 (воспитательница), 1 (ребенок №3), 3 (ребенок №2), 3 (ребенок №1). Для остальных четырех порядков последний ребенок произносит слово, отличное от 3.

Входные данные 2

2
2
3 3
4 0

Выходные данные 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

Примечание 2

Пояснение ко второму примеру: это пример из второй подзадачи, которая имеет частичное оценивание. Для первого сценария выполняется $N + 1 < M \le N + 5$, поэтому этот результат дает $0.77$ (округлено до двух десятичных знаков). Для второго сценария выполняется $M \le N + 1$, поэтому этот результат дает $1$. Поскольку берется минимум по всем тестовым сценариям, это решение получило бы $0.77$ от общего количества баллов за этот пример.

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.