RiseOJ는 solved.ac와 제휴 관계가 없습니다. 티어 아이콘 © solved.ac. solved.ac
포럼
R00235

레이저 교차 판정

Gold II 골드 II
난이도
2.500s
시간 제한
256MB
메모리 제한
1
맞았습니다!!
1
제출 수
100.0%
정답률
레이팅

의견: 0

설명

두 개의 레이저 선분 \(\overline{P_1 P_2}\)\(\overline{P_3 P_4}\) 가 주어질 때, 두 선분이 교차하는지 판정합니다.

다음 경우 모두 "교차한다"로 봅니다:

  • 두 선분이 한 점에서 가로질러 만나는 경우
  • 한 선분의 끝점이 다른 선분 위(끝점 포함)에 닿는 경우 (끝점 접촉)
  • 두 선분이 같은 직선 위에 있으면서 일부 구간 또는 한 점을 공유하는 경우 (공선 겹침)

그 외(전혀 만나지 않음)는 "교차하지 않는다"입니다. 선분의 길이가 \(0\) (두 끝점이 같은 점)일 수도 있으며, 이 경우 그 점이 상대 선분 위에 있으면 교차로 봅니다.

좌표가 크므로 CCW를 정수 연산으로 계산해야 합니다. 총 \(Q\) 개의 질의가 주어집니다.

제약
  • \(1 \le Q \le 22\,000\)
  • \(-10^9 \le\) 모든 좌표 \(\le 10^9\)
입력 형식

첫 줄에 질의 수 \(Q\) 가 주어집니다.

이어서 \(Q\) 개의 줄에 각 질의가 \(x_1\ y_1\ x_2\ y_2\ x_3\ y_3\ x_4\ y_4\) 형태로 주어집니다. \((x_1,y_1)\)\((x_2,y_2)\) 가 첫 선분, \((x_3,y_3)\)\((x_4,y_4)\) 가 둘째 선분입니다.

출력 형식

각 질의에 대해 교차하면 \(1\), 아니면 \(0\) 을 한 줄에 하나씩 출력합니다.

예제 1
입력
3
0 0 4 4 0 4 4 0
0 0 2 2 3 3 5 5
0 0 1 1 2 2 3 3
출력
1
0
0
설명

첫 질의는 두 선분이 가운데서 교차하므로 \(1\). 둘째는 한 직선 위에서 겹치지 않고 떨어져 있으므로 \(0\). 셋째는 같은 직선 위에서 점 \((2,2)\) 를 공유하며 닿으므로 \(1\) 입니다.

예제 2
입력
2
0 0 5 0 5 0 5 5
0 0 2 0 3 0 5 0
출력
1
0
설명

첫 질의는 끝점 \((5,0)\) 을 공유하므로(끝점 접촉도 교차로 봄) \(1\). 둘째는 같은 직선 위에서 \([3,5]\) 구간이 겹치므로 \(1\) 입니다.

힌트

막혔나요? 코인으로 단계별 힌트를 잠금 해제하세요 — 첫 힌트는 가벼운 방향 제시, 뒤로 갈수록 더 많이 알려 줍니다. 문제를 풀면 모든 힌트가 무료로 공개됩니다.

문제 정보

riseoj 작성

출처 Original

평가 및 의견

레이저 교차 판정

개요
출제자 난이도 Gold II 골드 II 의견 0 / 50 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

레이저 교차 판정

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8