#はじめに
皆さんこんにちは! 競プロの問題の理解を深めるために解説記事を書いていこうと思います!今回は ABC234 B です!
気に入っていただけたらLGTMして頂けるとうれしいです!
何かあればコメントやTwitterからお願いいたします!
#B - Longest Segment
####問題概要
$N$個の座標$(x_i, y_i)$における$2$個の線分の長さの最大値を求めよ.
####制約
・$2 \leq N \leq 100$
・$ -1000 \leq x_i, y_i \leq 1000$
・$(x_i, y_i) \not= (x_j, y_j) (i \not= j)$
・入力はすべて整数
##考察
####ポイント
全探索しましょう
####解説
制約が小さいので,各座標ごとに線分の値を求めます.
全探索することで最大値を更新していきましょう.
線分の距離$L$の式は
$ L = \sqrt{(x_i - x_j)^2 + (y_i - y_j)^2}, (i \not= j) $
で求められます.
#実装
答えは小数を含むのでlong double
で宣言しましょう.全探索は2重ループで実装できます.
##正解コード
#include <bits/stdc++.h>
using namespace std;
int main()
{
//入力
int N;
cin >> N;
vector<int> x(N), y(N);
for(int i = 0; i < N; i++){
cin >> x[i] >> y[i];
}
//答えの宣言
long double ans = -1.0;
//全探索
for(int i = 0; i < N; i++){
for(int j = i + 1; j < N; j++){
long double dis = sqrt((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]));
if(dis > ans) ans = dis; //今までの最大値より線分が大きい場合は値を更新する.
}
}
//出力
cout << setprecision(10)<< ans << endl;
}