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

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

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

問題

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


「部外者をはじけ」では、N 人の人物の二次元座標 (x_i, y_i) が与えられます。
異なる二人を結んだ直線をすべて出力してください。


N 人の人物の二次元座標 (x_i, y_i) が与えられます。
異なる二人を結んだ直線の方程式 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_N y_N

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

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

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

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


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

人物 i (1 ≦ i ≦ N-1) と 人物 j (i+1 ≦ j ≦ N) を結んだ直線の方程式を a_(i,j)x + b_(i,j)y + c_(i,j) = 0 としたとき、a_(i,j), b_(i,j), c_(i,j) の値をこの順に空白区切りで出力してください。
出力は i の昇順、j の昇順に行ってください。
具体的には以下の形式で出力してください。

a_(1,2) b_(1,2) c_(1,2)
a_(1,3) b_(1,3) c_(1,3)
....
a_(1,N) b_(1,N) c_(1,N)
a_(2,3) b_(2,3) c_(2,3)
....
a_(N-1,N) b_(N-1,N) c_(N-1,N)

ただし、真値との誤差が 0.001 未満である場合にのみ正答とみなされます。

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

条件

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

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

入力例1

2
210.43 423.86
104.71 212.42

出力例1

-211.4400000000 105.7200000000 -317.1600000000

入力例2

3
331.26 330.83
264.31 3.44
118.56 118.09

出力例2

-327.3900000000 66.9500000000 86302.1429000000
-212.7400000000 212.7000000000 104.7114000000
114.6500000000 145.7500000000 -30804.5215000000

問題一覧へ戻る

ページの先頭へ戻る