1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【ABC234】 B - Longest SegmentをC++で解説

Posted at

#はじめに
 皆さんこんにちは! 競プロの問題の理解を深めるために解説記事を書いていこうと思います!今回は 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;
}

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?