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

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

교차

면접 대비

시간 제한1초메모리 제한128 MB

요약
각 테스트마다 선분과 축에 평행한 직사각형이 적어도 한 점을 공유하는지 판정한다. 직사각형이 퇴화한 경우도 포함한다.
난이도

보통10점 중 6점

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

문제

입력으로 주어진 선분과 직사각형이 서로 교차하는지 판별하는 프로그램을 작성하시오.

예를 들어 선분의 시작점이 (4,9)(4, 9), 끝점이 (11,2)(11, 2)이고, 직사각형의 한 모서리가 (1,5)(1, 5), 그 반대쪽 모서리가 (7,1)(7, 1)인 경우, 이 선분과 직사각형은 서로 교차하지 않는다.

선분과 직사각형이 교차한다는 것은 두 도형이 적어도 한 점을 공유한다는 뜻이다. 입력으로 주어지는 좌표는 모두 절댓값이 5050 이하인 정수이지만, 두 도형의 교점은 정수 좌표가 아닐 수도 있다. 직사각형의 넓이는 00일 수도 있다(즉, 선분이나 하나의 점으로 축소될 수 있다).

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. 각 테스트 케이스는 한 줄로 이루어지며, 공백으로 구분된 여덟 개의 정수 xstart ystart xend yend xleft ytop xright ybottom가 주어진다.

  • (xstart,ystart)(xstart, ystart)는 선분의 시작점, (xend,yend)(xend, yend)는 선분의 끝점이다.
  • (xleft,ytop)(xleft, ytop)와 (xright,ybottom)(xright, ybottom)은 직사각형의 서로 마주 보는 두 모서리의 좌표이다.

변수 이름의 left, right, top, bottom은 실제 방향(왼쪽·오른쪽·위·아래)을 뜻하지 않으며, 이름이 그렇게 지어진 것은 우연의 일치일 뿐이다. 모든 좌표는 절댓값이 5050 이하인 정수이다.

출력

각 테스트 케이스마다 선분과 직사각형이 교차하면 T를, 교차하지 않으면 F를 한 줄에 하나씩 출력한다. 선분의 두 끝점이 모두 직사각형 내부에 있는 경우에도 교차하는 것으로 보아 T를 출력한다.

예제3

  1. 예제 1

    입력
    1
    4 9 11 2 1 5 7 1
    
    예상 출력
    F
    
  2. 예제 2

    입력
    1
    2 2 3 3 0 0 5 5
    
    예상 출력
    T
    
  3. 예제 3

    입력
    4
    4 9 11 2 1 5 7 1
    2 2 3 3 0 0 5 5
    -10 0 10 0 -5 -5 5 5
    6 6 10 10 0 0 5 5
    
    예상 출력
    F
    T
    T
    F