Darkest night, I'll confront you here....
이 문제는 투 스텝 인터랙티브 문제입니다.
히카리와 타이리츠는 협동 게임을 하여 그들의 우정을 증명하고자 한다.
게임은 $n$개의 직선이 있는 평면에서 진행된다. 어떠한 두 직선도 평행하지 않으며, 어떠한 세 직선도 한 점에서 만나지 않으며, 모든 직선은 $x$축, 혹은 $y$축과 평행하지 않는다.
어떠한 위치 $(x_0, y_0)$ 이 직선 $y = ax + b$ 위에 있다는 것은, $y_0>ax_0+b$를 만족한다는 것이다. 반대로, 어떠한 위치 $(x_0,y_0)$ 이 직선 $y = ax + b$ 아래에 있다는 것은, $y_0<ax_0+b$를 만족한다는 것이다. 이에 따라, 평면 상에서 직선에 속하지 않는 모든 점들은 각 직선의 위에 있거나 아래에 있다.
어떠한 두 점 $p, q$ 가 $n$ 개의 직선에 대해서 항상 같이 위에 있거나 같이 아래에 있다면, 두 점 $p, q$ 는 같은 구역에 속한다고 한다. 상술한 문제 조건에 따라서, 평면은 정확히 $\frac{n(n+1)}{2}+1$ 개의 구역들로 분할됨을 증명할 수 있다.
두 서로 다른 구역 $e, f$ 가 인접하다는 것은, $e, f$ 에 속하는 임의의 두 점 $p(e), p(f)$ 에 대해서 $p(e)$ 와 $p(f)$ 사이를 정확히 하나의 직선만을 가로질러 이동할 수 있음을 뜻한다. 서로 다른 인접한 쌍은 정확히 $n^2$ 개임을 증명할 수 있다.
게임은 히카리가 각 구역들에 특정한 표시를 남긴 후, 타이리츠가 이 표시를 통해서 구역 간을 이동하는 식으로 이루어진다.
히카리의 차례를 먼저 설명한다. 히카리가 각 구역들에 표시를 남기는 것은 다음과 같은 인터랙션을 통해 이루어진다.
히카리는 $1\,000$ 이하의 양의 정수 $M$을 선언한다.
채점 인터랙터는 다음과 같은 정보들을 히카리에게 표준 입력으로 전달한다:
히카리는 각 구역마다 두 개의 정수를 표시해야 한다. 첫 번째 정수는 $1$부터 $M$ 사이의 정수여야 하며, 두 번째 정수는 $0$부터 $n$ 사이의 정수여야 한다.
이제 타이리츠의 차례를 설명한다. 타이리츠의 목표는 평면의 어떤 구역에서 게임을 시작하여, 다른 어떤 구역으로 이동해야 한다. 일련의 이동 과정은 다음과 같은 인터랙션을 통해 이루어진다.
채점 인터랙터는 첫 줄에 히카리가 받은 직선의 개수 $n$ 을 표준 입력으로 전달한다.
채점 인터랙터는 다음 줄에 총 $4$ 개의 정수를 타이리츠에게 표준 입력으로 전달한다.
타이리츠는 자신이 있는 구역과 인접한 구역으로 이동할 수 있다. 이때, 어떤 두 구역이 인접하다는 것은 두 구역이 공유하는 변이 존재한다는 것이다. 타이리츠가 자신과 인접한 구역으로 이동하는 것은 다음과 같은 절차를 $6n$ 번 반복하여 이루어진다.
채점 인터랙터는 길이 $M$의 이진수열을 타이리츠에게 표준 입력으로 전달한다. 해당 이진수열의 $i$번째 원소가 $0$이라면 직전에 방문하지 않은 구역들 중 $i$를 첫번째 정수로 가지는 인접한 구역이 없다는 것이고, $1$이라면 있다는 것이다.
타이리츠는 둘 중 하나의 행동을 할 수 있다:
채점 인터랙터는 타이리츠가 도착지에 도달했는지 여부를 타이리츠에게 알려준다. 타이리츠가 도착지에 도달하였다면, 프로그램은 즉시 종료하여야 한다. 프로그램이 종료되면 게임은 성공한다. 도달하지 못 했고, 이동 횟수가 $6n$ 번 미만일 경우, 다시 이동을 시작한다.
타이리츠가 $6n$ 번의 이동 후에도 도착지에 도달하지 못 했다면 게임은 실패한다.
타이리츠의 차례를 진행할 때, 타이리츠가 도착하고 싶은 구역과 첫 번째 정수와 두 번째 정수가 동일한 어떤 구역에 도달했다고 하더라도, 해당 구역이 타이리츠가 도착하고 싶은 구역은 아닐 수도 있음에 유의하라.
게임을 성공할 수 있게, 히카리와 타이리츠의 전략을 수행하는 프로그램을 작성하여라. 히카리가 처음에 선언하는 정수 $M$이 작으면 작을수록 더욱 큰 점수를 얻을 수 있다.
출력 버퍼를 비우는 방법은 다음과 같다.
fflush(stdout)std::cout << std::flushSystem.out.flush()sys.stdout.flush()이외의 언어에 대해서는 언어별 명세를 참고해야 한다.