17386번 : 선분 교차 1 /C++
2023. 6. 18. 12:54ㆍ개인공부/코딩테스트
세 점이 일직선 상에 없으므로 판단할때 음수만 판단한다, long long 곱은 역시나 플로우가 발생하므로 조심하자
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
31
32
33
34
|
#include <iostream>
using namespace std;
typedef long long ll;
ll CCW(ll x1, ll y1, ll x2, ll y2, ll x3, ll y3)
{
return (x2 - x1) * (y3 - y1) - (x3 - x1)*(y2 - y1);
}
int main()
{
ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
ll x[4], y[4];
for (int i = 0; i < 4; ++i)
{
cin >> x[i] >> y[i];
}
// long long 곱으로 오버플로우 발생하므로 양수 음수 판단
ll c[4] = { CCW(x[0], y[0], x[1], y[1], x[2], y[2]),CCW(x[0], y[0], x[1], y[1], x[3], y[3])
,CCW(x[2], y[2], x[3], y[3], x[1], y[1]) ,CCW(x[2], y[2], x[3], y[3], x[0], y[0]) };
if ((c[0] < 0 && c[1] > 0 || c[0] > 0 && c[1] < 0) && (c[2] > 0 && c[3] < 0 || c[2] < 0 && c[3] > 0))
cout << 1;
else
cout << 0;
return 0;
}
|
cs |
'개인공부 > 코딩테스트' 카테고리의 다른 글
11664번: 선분과 점 / C++ (0) | 2023.06.18 |
---|---|
11758번 : CCW / C++ (0) | 2023.06.18 |
백준 16135번 : OBB(Oriented bounding box) / C++ (0) | 2023.06.15 |
백준 20040번: 사이클 게임 / C++ (0) | 2023.04.03 |
백준 1717번: 집합의 표현 / C++ (0) | 2023.04.03 |