Yuulis.log

トンネルを抜けるとそこは参照エラーであった。

【AtCoder】ABC 362 B - Right Triangle | 茶コーダーが解くAtCoder

atcoder.jp

実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 66

問題概要

 xy 平面上の同一直線上にない3点  A(x_A, y_A), B(x_B, y_B), C(x_C, y_C) が与えられる。三角形  \mathrm{ABC} が直角三角形であるかを判定せよ。

制約

  • 入力はすべて整数。
  •  -1000 \leq x_A, y_A, x_B, y_B, x_C, y_C \leq 1000

考察

直角三角形であることの必要十分条件三平方の定理が成り立つことである。

physkorimath.xyz

したがって、  \angle\mathrm{A}, \angle\mathrm{B}, \angle\mathrm{C} がそれぞれ直角となる場合について、三平方の定理が成り立つかどうかを確認し、どれか1つでも成り立てばその三角形は直角三角形ということになる。

コード

#include <bits/stdc++.h>
using namespace std;

// ======================================== //

int main()
{
    int x_a, y_a, x_b, y_b, x_c, y_c;
    cin >> x_a >> y_a >> x_b >> y_b >> x_c >> y_c;

    double ab = (x_a - x_b) * (x_a - x_b) + (y_a - y_b) * (y_a - y_b);
    double bc = (x_b - x_c) * (x_b - x_c) + (y_b - y_c) * (y_b - y_c);
    double ca = (x_c - x_a) * (x_c - x_a) + (y_c - y_a) * (y_c - y_a);

    if (ab + bc == ca || bc + ca == ab || ca + ab == bc)
        cout << "Yes" << endl;
    else
        cout << "No" << endl;
}

atcoder.jp

実装時間: 5分以内