3
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 5 years have passed since last update.

AtCoder ARC 004 A 2点間距離の最大値をpython3で解いた

Posted at

AtCoderのARC004のA問題をpythonで解きました。pythonの解答が見つからなかったので残しておきます。

###環境
python3.4.3でときました

###問題概要
####問題文
平面上に N個の点があり、それぞれ 0から N−1までの番号が付けられており、それぞれの点について x座標と y座標が与えられています。その N点のうち 2点を選び結んで得られる線分のうち、最も長くなる線分の長さを求めてください。

2点間(x1,y1) (x2,y2)の線分の長さの公式は以下の通りです。

\sqrt{(x2 - x1)^2 + (y2 - y1)^2}

####入力

N
x0 y0
x1 y1
・
・
・
xN−1 yN−1

####制約

入力は N+1行ある。1行目には、点の個数を表す整数 N(2≦N≦100)が与えられる。2行目から N+1行までのi + 2(0≦i<N)行目には、i番の点の x座標を表す整数 xi(0≦xi≦100)と y座標を表す整数yi(0≦yi≦100)が空白を区切りとして与えられる。与えられる点のうち x座標と y座標がともに一致する点の組は存在しないが、2つの点を繋ぐ線分上に他の点が存在することはありうる。

####入出力例

入力

4
2 2
0 0 
1 1
3 3

出力

4.242641

###ポイント
全探索で解く。for文を2回ネストさせる。
今回累乗をするときはpow()関数を使った。
またルートの計算にはmathライブラリのsqrt関数を使った。

###コード例

import math
# nの値を取得
n = int(input())
# 座標はx座標はx、y座標はyと分けてリストに
x = list(range(n))
y = list(range(n))
for i in range(n):
  x[i],y[i] = map(int,input().split())
ans = 0
for j in range(n):
  for t in range(n):
    if math.sqrt(pow(x[t]-x[j],2) + pow(y[t] - y[j],2)) > ans:
       ans = math.sqrt(pow(x[t]-x[j],2) + pow(y[t] - y[j],2))
print(ans)

このコード だと座標上の同じ点どうしも計算してしまいますが同じ点は線分の長さ0になり結果には影響を与えません。

###終わりに
もっと効率の良いコード があるよという方(特に入力を受け付ける部分)はコメントで是非ご意見ください。

3
0
3

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
3
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?