AtCoder Beginner Contest 234 B - Longest Segment
問題の要約
二次元平面上にN個の点がある。i個目の点の座標は(xi,yi)である。
この中から2個の点を選ぶとき、それらを結ぶ線分の長さの最大値を求めよ。
制約
2<=N<=100
-1000<=xi,yi<=1000
(xi,yi)≠(xj,yj)(i≠j)
入力
N
x1 y1
...
xN yN
出力
想定解との絶対誤差または相対誤差が10^-6以下であれば正解とみなされる。
考え方
1,2点間の線分の長さはx=x1-x2,y=y1-y2とすると、√(x*x+y*y)となる。
2,Nの制約から全探索しても間に合う。
3,出力の際には誤差に気を付ける。
実際のプログラム
#include<iostream>
#include<vector>
#include<map>
#include<cmath>
#include<iomanip>
using namespace std;
double distance(pair<double,double> xy1, pair<double,double> xy2){
double x = xy1.first-xy2.first;
double y = xy1.second-xy2.second;
return sqrt(x*x+y*y);
}
int main(){
int N;
cin >> N;
vector<pair<double,double>> xy(N);
for(int i = 0; i < N; i++){
cin >> xy[i].first >> xy[i].second;
}
double max_distance = 0;
for(int i = 0; i < N; i++){
for(int j = i+1; j < N; j++){
double d = distance(xy[i],xy[j]);
max_distance = max(max_distance, d);
}
}
cout << setprecision(12) << max_distance << endl;
return 0;
}