17386번: 선분 교차 1
첫째 줄에 L1의 양 끝 점 x1, y1, x2, y2가, 둘째 줄에 L2의 양 끝 점 x3, y3, x4, y4가 주어진다. 세 점이 일직선 위에 있는 경우는 없다.
www.acmicpc.net
[ 백준 17386번 선분 교차1 소스 코드 ]
#include <stdio.h>
long long int ccw(long long int ax,long long int ay,
long long int bx,long long int by,
long long int cx,long long int cy)
{
long long int result = ax*by + bx*cy + cx*ay - bx*ay - cx*by - ax*cy;
if(result>0)
return 1;
else if(result<0)
return -1;
else
return 0;
}
int main()
{
long long int a,b,c,d,e,f,g,h,k1,k2,k3,k4;
scanf("%lld %lld %lld %lld",&a,&b,&c,&d);
scanf("%lld %lld %lld %lld",&e,&f,&g,&h);
k1=ccw(a,b,c,d,e,f);
k2=ccw(a,b,c,d,g,h);
k3=ccw(e,f,g,h,a,b);
k4=ccw(e,f,g,h,c,d);
if((k1*k2)<=0 && (k3*k4)<=0)
printf("1\n");
else
printf("0\n");
}
[ 백준 17386번 선분 교차1 소스 코드 ]
#include<iostream>
using namespace std;
struct Point {
long long x;
long long y;
};
long long CCW(Point A, Point B, Point C) {
long long result = A.x * B.y + B.x*C.y + C.x*A.y - B.x*A.y - C.x*B.y - A.x*C.y;
if (result > 0) {
return 1;
}
else if (result < 0) {
return -1;
}
return 0;
}
int main() {
Point A, B, C, D;
cin >> A.x >> A.y >> B.x >> B.y;
cin >> C.x >> C.y >> D.x >> D.y;
long long ABC = CCW(A, B, C);
long long ABD = CCW(A, B, D);
long long CDA = CCW(C, D, A);
long long CDB = CCW(C, D, B);
if ((ABC * ABD) <= 0 && (CDA * CDB) <= 0) {
std::cout << "1\n";
}
else {
std::cout << "0\n";
}
}
'백준 문제풀이' 카테고리의 다른 글
백준 19940번 - 피자 오븐 (0) | 2021.03.27 |
---|---|
백준 19939번 - 박 터뜨리기 (0) | 2021.03.27 |
백준 3184번 - 양 소스 코드 (0) | 2021.03.08 |
백준 16948번 - 데스 나이트 소스 코드 (0) | 2021.03.07 |
백준 1260번 DFS와 BFS (0) | 2021.03.03 |