본문 바로가기

백준

1064 평행사변형

 

세 점이 주어질 때 평행사변형 3개를 만들 수 있으므로 3개의 길이를 구하고 비교하면 되겠다 싶었다.

 

근데 예외처리가 문제였음ㅋㅋㅋㅋ 

 

처참한 기미상궁

 

두 점이 같은 경우나 전부 x가 같거나 y가 같은 경우만 예외처리 했는데 이것도 문제였다.

 

 

 

알고보니 x축, y축 일직선 뿐만 아니라 그냥 직선 위에 있는 점이면 평행사변형이 되지 않는다. 

 

그래서 직선의 기울기 공식을 사용해서 문제를 풀었다.

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <cmath>

#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()

using namespace std;
using i64 = long long;
using ii = pair<int, int>;
using ii64 = pair<i64, i64>;

double  length(double x1, double y1, double x2, double y2, double x3, double y3)
{
    double ans = 0;
    ans += sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
    ans += sqrt((x3 - x1) * (x3 - x1) + (y3 - y1) * (y3 - y1));

    return ans * 2.0;
}

bool    check(double x1, double y1, double x2, double y2, double x3, double y3)
{
    if ((x2 - x1) * (y3 - y1) == (y2 - y1) * (x3 - x1))
        return false;
    return true;
}

int     main()
{
    vector<double> x(3);
    vector<double> y(3);

    vector<double> ans(3);
    for (int i = 0; i < 3; i++)
        scanf("%lf %lf", &x[i], &y[i]);

    if (!check(x[0], y[0], x[1], y[1], x[2], y[2]))
    {
        printf("-1\n");
        return 0;
    }
    
    for (int i = 0; i < 3; i++)
    {
        ans[i] = length(x[i], y[i], x[(i + 1) % 3], y[(i + 1) % 3], x[(i + 2) % 3], y[(i + 2) % 3]);
    }

    sort(all(ans));

    printf("%.10lf\n", ans[2] - ans[0]);

    return 0;
}

'백준' 카테고리의 다른 글

3036 링  (0) 2020.09.03
14717 앉았다  (2) 2020.09.02
1493 박스 채우기  (0) 2020.08.30
10713 기차 여행  (0) 2020.08.28
15805 트리 나라 관광 가이드  (0) 2020.08.26