아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

시야를 가리는지 판정하기

시간 제한2초메모리 제한512 MB

요약
각 테스트에서 선분 a 위의 한 점이 벡터 v 방향으로 이동할 때 선분 b에 닿는지 판정한다.
난이도

보통10점 중 7점

유형
기하, 수학, 구현, 이분 탐색
정답자
아직 제출이 없습니다

문제

Anton은 비디오 게임용 2D 그래픽 엔진을 개발하고 있다. 이 엔진은 시장에 나와야 한다. 물체를 올바르게 표시하려면, 플레이어가 특정 방향을 바라볼 때 한 물체가 다른 물체로 향하는 시야를 가리는지 알아야 한다.

시제품에서 Anton은 물체를 평면 위에서 서로 교차하지 않는 선분으로 본다. 선분 aa는 벡터 v⃗\vec{v} 방향으로 선분 bb로 향하는 시야를 가린다. 이는 aa 위의 점 AA와 bb 위의 점 BB가 존재하여 벡터 AB→\overrightarrow{AB}와 v⃗\vec{v}가 같은 방향을 향하는 경우를 말한다. 다시 말해, aa 위의 어떤 점이 v⃗\vec{v}의 방향을 따라 움직이기 시작했을 때 선분 bb에 닿는 점이 존재한다는 뜻이다.

Anton은 프로젝트에 투자할 사람을 찾느라 바쁘기 때문에, 그래픽 엔진의 이 부분을 구현해 달라고 요청한다.

입력

입력의 첫 줄에는 정수 nn이 주어지며, 이는 뒤따르는 테스트의 수이다 (1≤n≤50 0001 \le n \le 50\,000).

다음 nn개의 각 줄에는 10개의 정수 ax1ax_1, ay1ay_1, ax2ax_2, ay2ay_2, bx1bx_1, by1by_1, bx2bx_2, by2by_2, vxvx, vyvy가 주어진다. 이는 첫 번째 선분의 끝점 좌표, 두 번째 선분의 끝점 좌표, 시야 방향 벡터의 좌표이다. 모든 좌표의 절댓값은 10610^6을 넘지 않는다. 각 선분의 길이는 양수이고, 방향 벡터 v⃗\vec{v}는 영벡터가 아니다.

출력

각 테스트마다 첫 번째 선분이 주어진 방향에서 두 번째 선분으로 향하는 시야를 가리면 "Yes"를, 가리지 않으면 "No"를 출력한다.

예제1

  1. 예제 1

    입력
    2
    0 2 1 1 2 2 3 1 1 1
    0 2 1 1 2 2 3 1 -1 -1
    
    예상 출력
    Yes
    No