1. paizaラーニングトップ
  2. レベルアップ問題集
  3. Bランク・スキルチェック過去問題セット(言語選択)
  4. 問題一覧 Scala編
  5. 「部外者をはじけ」を解くために:part4 Scala編

Bランク・スキルチェック過去問題セットのサムネイル
「部外者をはじけ」を解くために:part4 Scala編(paizaランク C 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!


「部外者をはじけ」では、直線と点の距離を計算する必要があります。
直線と点の距離を計算してみましょう。


二次元平面上の座標 (x_1, y_1) , (x_2, y_2) , (x_3, y_3) が与えられます。
(x_1, y_1) と (x_2, y_2) を結んだ直線と (x_3, y_3) との距離を求めてください。

ここで、任意の二点 (x_1, y_1), (x_2, y_2) を結ぶ直線の方程式 ax - by + c = 0 は次のように計算できます。

(y_2-y_1) * x - (x_2-x_1) * y + {(x_2-x_1) * y_1 - (y_2-y_1) * x_1} = 0

また、ある点 (x_i, y_i) と直線 ax + by + c = 0 との距離 d_i は次のように求まります。

d_i = |a * x_i + b * y_i + c| / (a^2 + b^2)^(1/2)

入力される値

N
x_1 y_1
x_2 y_2
x_3 y_3

・1 行目には、検出した人の数 N が入力されます。

・i+1 (1 ≦ i ≦ N) 行目には、i 番目の人物の二次元座標 (x_i, y_i) が空白区切りで与えられます。

・なお、座標の単位は [m] で、座標はそれぞれ小数点以下 2 桁までの小数で与えられます。

・入力は合計 N + 1 行からなり、末尾に改行を 1 つ含みます。


入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
期待する出力

(x_1, y_1) と (x_2, y_2) を結んだ直線と (x_3, y_3) との距離を出力してください。
ただし、真値との誤差が 0.001 未満である場合にのみ正答とみなされます。

出力の末尾に改行を入れ、余計な文字、空行を含んではいけません。

条件

すべてのテストケースで以下の条件を満たします。

・ N = 3
・ 0 ≦ x_i < 640
・ 0 ≦ y_i < 480
・ (x_i,y_i) ≠ (x_j,y_j) (i ≠ j)

入力例1

3
331.26 330.83
264.31 3.44
118.56 118.09

出力例1

165.7649475062

入力例2

3
237.96 237.63
55.13 54.9
406.88 42.96

出力例2

257.1019258032

問題一覧へ戻る

ページの先頭へ戻る