우주선 궤적
시간 제한2초메모리 제한512 MB
3차원 공간에서 시작 위치와 방향, 목표 위치와 방향이 주어질 때, 반지름이 r0 이상인 원호와 직선을 이어 붙여 두 상태를 잇는 경로를 구합니다.
문제
당신은 3차원 공간에서 우주선을 조종하고 있다.
우주선은 지금 점 에 있고, 방향 으로 날고 있다. 목표는 점 에 방향 를 유지한 채 도착하는 것이다. 우주선은 직선 또는 반지름이 이상인 원호를 따라서만 비행할 수 있다. 비행 구간이 바뀌는 지점(직선과 원호, 원호와 직선, 서로 다른 두 원호, 서로 다른 두 직선. 마지막 경우는 무의미하지만 포함한다)에서는 방향이 같아야 한다. 방향 벡터는 양의 상수배만큼 차이가 나도 같은 방향으로 본다. 예를 들어 (1, 1, 1)과 (2, 2, 2)는 같은 방향이지만, (1, 1, 1)과 (-1, -1, -1)은 같은 방향이 아니다.
궤적은 최단일 필요가 없다. 출력 형식에 적힌 느슨한 조건만 만족하면 어떤 궤적이든 된다.
입력
첫 줄에 정수 , , ()이 주어진다.
둘째 줄에 정수 , , (, 셋 중 적어도 하나는 0이 아니다)이 주어진다.
셋째 줄에 실수 , , ()이 주어진다.
넷째 줄에 실수 , , (, 셋 중 적어도 하나는 0이 아니다)이 주어진다.
다섯째 줄에 정수 ()이 주어진다.
출력
첫 줄에 궤적을 이루는 구간의 개수 ()을 출력한다. 다음 개의 줄에 각 구간을 설명한다.
각 구간마다 직선이면 1, 원호이면 2를 먼저 출력하고, 그 뒤에 구간의 끝점 좌표를 실수로 출력한다. 원호인 구간은 원의 중심 좌표를 추가로 출력한다. 구간의 시작점은 이전 구간의 끝점이며, 첫 구간의 시작점은 전체 출발점이다.
출력하는 모든 좌표의 절댓값은 1000을 넘으면 안 된다. 채점 프로그램은 최소 倍정밀도 실수로 계산한다. 변곡점마다 인접한 두 구간의 방향이 이루는 각은 을 넘으면 안 된다. 끝점은 요구된 끝점과 이내로 가까워야 한다. 시작 방향과 요구된 시작 방향이 이루는 각, 끝 방향과 요구된 끝 방향이 이루는 각도 각각 을 넘으면 안 된다. 원호 구간마다 중심에서 두 끝점까지의 거리 차이는 이하여야 하고, 각 거리는 이상이어야 한다.
아주 짧은 직선 구간은 조심해야 한다. 반올림 오차 때문에 방향이 크게 흔들려서 각도 검사에 실패할 수 있다. 길이가 0인 직선 구간은 항상 오답이다.