Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

dh-winternagi 님의 블로그

(17386) 선분 교차 1 본문

백준 (C++)/Solve

(17386) 선분 교차 1

dh-winternagi 2026. 4. 22. 00:49

https://www.acmicpc.net/problem/17386

단계별로 풀어보기

39단계(기하 2) 4번째

 

 

 

한 선분의 양 끝점과 다른 선분의 끝점 각각을 ccw 알고리즘으로 검사했을 때 부호가 반대라면 다른 선분은 이 선분을 늘린 직선의 서로 다른 영역에 존재한다. 두 선분 각각이 이를 만족한다면 두 선분은 겹친다.

단 이 방식은 어떤 세 점도 같은 직선 상에 있지 않을 때(ccw가 0인 경우가 없을 때)만 성립한다.

 

 

 

#include <iostream>
using namespace std;

struct Cord{
  long x;
  long y;
  
  Cord(): x(0), y(0) {}
  Cord(long x0, long y0): x(x0), y(y0) {}
};

int main() {
  Cord p[4];
  
  for(int i=0;i<4;i++)  cin >> p[i].x >> p[i].y;
  
  auto ccw= [](Cord p1, Cord p2, Cord p3){
    long t= (p2.x-p1.x)*(p3.y-p1.y)-(p3.x-p1.x)*(p2.y-p1.y);
    
    if(t>0)  return 1;
    else if(t<0)  return -1;
    else  return 0;
  };
  
  cout << (ccw(p[0],p[1],p[2])*ccw(p[0],p[1],p[3])<0
          && ccw(p[3],p[2],p[0])*ccw(p[3],p[2],p[1])<0);
  
  return 0;
}

'백준 (C++) > Solve' 카테고리의 다른 글

(20149) 선분 교차 3  (0) 2026.04.22
(17387) 선분 교차 2  (0) 2026.04.22
(25308) 방사형 그래프  (0) 2026.04.22
(11758) CCW  (0) 2026.04.21
(2166) 다각형의 면적  (0) 2026.04.21