728x90
반응형

www.acmicpc.net/problem/17386

 

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";
    }
}
반응형
Posted by 명문코딩컴퓨터
,