반응형

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

 

17386번: 선분 교차 1

첫째 줄에 L1의 양 끝 점 x1, y1, x2, y2가, 둘째 줄에 L2의 양 끝 점 x3, y3, x4, y4가 주어진다. 세 점이 일직선 위에 있는 경우는 없다.

www.acmicpc.net

 

 

[ 문제풀이 ]

 

1. 각각의 선분에 대해 ccw를 구하고 각 선분의 ccw를 곱한 값이 모두 0보다 작으면 선분은 교차합니다.

 

2. 그렇지 않다면 교차하지 않는 선분입니다.

 

[ 소스코드 ]

 

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
#include<iostream>
#define ll long long
 
using namespace std;
 
pair<ll, ll> arr[4];
 
int ccw(pair<ll, ll> a, pair<ll, ll> b, pair<ll, ll> c) {
    ll ret = (a.first * b.second + b.first * c.second + c.first * a.second) - (b.first * a.second + c.first * b.second + a.first * c.second);
 
    if (ret > 0return 1;
    else return -1;
}
 
int main()
{
    for (int i = 0; i < 4; i++) {
        scanf("%lld %lld"&arr[i].first, &arr[i].second);
    }
 
    if (ccw(arr[0], arr[1], arr[2]) * ccw(arr[0], arr[1], arr[3]) < 0 && ccw(arr[2], arr[3], arr[0]) * ccw(arr[2], arr[3], arr[1]) < 0) {
        printf("%d"1);
    }
    else {
        printf("%d"0);
    }
}
cs
반응형

+ Recent posts