Codeforces Round 716 (Div. 2) |
---|
Закончено |
Это интерактивная задача.
Маленький Эхаб любит ползать по своей квартире. В ней есть $$$n$$$ комнат, пронумерованных от $$$0$$$ до $$$n-1$$$. Для каждой пары комнат $$$a$$$ и $$$b$$$, либо есть прямой переход из комнаты $$$a$$$ в комнату $$$b$$$, либо наоборот из комнаты $$$b$$$ в комнату $$$a$$$, но не одновременно.
Маленький Эхаб хочет пойти поиграть с маленьким Бадави. Он хочет знать, сможет ли он добраться до него. Однако, он не знает ничего про свою квартиру, кроме количества комнат. Он может задать няне два типа вопросов:
Он может задать не более $$$9n$$$ вопросов первого типа, и не более $$$2n$$$ вопросов второго типа.
После того, как он задаст какие-то вопросы, он хочет знать для каждой пары комнат $$$a$$$ и $$$b$$$, существует ли путь из $$$a$$$ в $$$b$$$ или нет. Путь из $$$a$$$ в $$$b$$$ это последовательность переходов, которая начинается в комнате $$$a$$$ и заканчивается в комнате $$$b$$$.
Первая строка содержит одно целое число $$$t$$$ ($$$1 \le t \le 30$$$) — количество наборов входных данных.
Каждый набор входных данных начинается с целого числа $$$n$$$ ($$$4 \le n \le 100$$$) — количества комнат.
Сумма $$$n$$$ по всем наборам входных данных в одном тесте не превышает $$$500$$$.
Чтобы вывести ответ для набора входных данных, выведите строку содержащую «3», после чего $$$n$$$ строк, каждая содержит двоичную строку длины $$$n$$$. $$$j$$$-й символ в $$$i$$$-й строке должен равняться $$$1$$$, если существует путь из комнаты $$$i$$$ в комнату $$$j$$$, и $$$0$$$, если нет. $$$i$$$-й символ в $$$i$$$-й строке должен равняться $$$1$$$ для всех $$$i$$$.
После вывода ответа, интерактор ответит одним целым числом. Если это $$$1$$$, значит вы вывели правильный ответ, и должны продолжить решать следующие наборы входных данных (или завершиться, если это был последний). Если это $$$-1$$$, вы вывели неправильный ответ, и должны немедленно завершиться, чтобы получиться вердикт Wrong answer. Иначе, вы можете получить произвольный вердикт, потому что ваше решение будет продолжать читать из закрытого потока.
Чтобы задать вопрос первого типа, используйте формат:
Чтобы задать вопрос второго типа, используйте формат:
Если интерактор ответит $$$-1$$$ вместо корректного ответа, это означает, что вы превысили разрешенное количество вопросов, или сделали некорректный вопрос. Немедленно завершитесь после получения $$$-1$$$, чтобы получить вердикт Wrong answer. Иначе, вы можете получить произвольный вердикт, потому что ваше решение будет продолжать читать из закрытого потока.
После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:
Взломы:
Первая строка должна содержать целое число $$$t$$$ — количество наборов входных данных.
Первая строка каждого набора входных данных должна содержать целое число $$$n$$$ ($$$4 \le n \le 100$$$) — количество комнат.
Каждая из следующих $$$n$$$ строк должна содержать двоичную строку длины $$$n$$$. $$$j$$$-й символ в $$$i$$$-й строке должен равняться $$$1$$$, если есть переход из комнаты $$$i$$$ в комнату $$$j$$$, и $$$0$$$ иначе. $$$i$$$-й символ в $$$i$$$-й строке должен равняться $$$0$$$.
1 4 0 0 1 1 1
2 3 3 0 1 2 1 0 1 1 0 2 2 2 1 1 3 1111 1111 1111 0001
В примере:
Первый вопрос спрашивает, есть ли переходы из комнаты $$$3$$$ в любую другую комнату.
Второй вопрос спрашивает про направление перехода между комнатами $$$0$$$ и $$$1$$$.
Спустя еще пару вопросов, мы узнаем, что можно добраться из любой комнаты до любой другой, кроме случая, когда мы начинаем в комнате $$$3$$$, из которой нельзя выйти. Поэтому, мы выводим матрицу:
1111
1111
1111
0001
Интерактор отвечает $$$1$$$, что означает, что наш ответ корректен.
Название |
---|