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

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

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

問題

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


「部外者をはじけ」では、正しい直線とぴったり重なる位置にいる人物が最低二人以上存在することが保障されています。
言い換えれば、異なる二人を結んだ直線のうち、最も部外者が少なくなる直線が正しい直線であるということです。
まずは異なる二人を結んだ直線を 1 つ求めてみましょう。


二次元平面上の座標 (x_1, y_1) と (x_2, y_2) が与えられます。
与えられる 2 点を通る直線の方程式 ax + by + c = 0 を求めてください。

ここで、任意の二点 (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

入力される値

N
x_1 y_1
x_2, y_2

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

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

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

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


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

与えられる 2 点を通る直線の方程式が ax + by + c = 0 であるとき、a, b, c の値をこの順に空白区切りで一行に出力してください。
ただし、真値との誤差が 0.001 未満である場合にのみ正答とみなされます。

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

条件

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

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

入力例1

2
331.26 330.83
264.31 3.44

出力例1

-327.3900000000 66.9500000000 86302.1429000000

入力例2

2
210.43 423.86
104.71 212.42

出力例2

-211.4400000000 105.7200000000 -317.1600000000

問題一覧へ戻る

ページの先頭へ戻る