1. paizaラーニングトップ
  2. レベルアップ問題集
  3. 新・Bランクレベルアップメニュー(言語選択)
  4. 問題一覧 Java編
  5. 【計算 1】マンハッタン距離 Java編

新・Bランクレベルアップメニューのサムネイル
【計算 1】マンハッタン距離 Java編(paizaランク C 相当)

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

問題

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

幾何学における距離概念にユークリッド距離とマンハッタン距離というものがあります。
ユークリッド距離では、二点 P_1(x_1,y_1), P_2(x_2,y_2) の間の距離 len(P1,P2) を次のように定義しています。

len(P_1,P_2) = sqrt( (x_1 - x_2)^2 + (y_1 - y_2)^2 )
(sqrt(A) は ルート A, つまり A の平方根を表す)


一方、マンハッタン距離では二点 P_1(x_1,y_1), P_2(x_2,y_2) の間の距離 len(P1,P2) を次のように定義しています。

len(P_1,P_2) = |x_1 - x_2| + |y_1 - y_2|

地点 P の座標と、1〜N(>3) 番の番号が振られた地点 F_1, ..., F_N の座標が与えられるので、ユークリッド距離で計算した際に地点 P からの距離が近い 3 地点の番号と、マンハッタン距離で計算した際に地点 P からの距離が近い 3 地点の番号を求めてください。
ただし距離が同じ地点が複数存在する場合、番号が小さい地点ほど近い地点であるものとしてください。

入力される値

P_x P_y
N
x_1 y_1
...
x_N y_N


・1 行目には地点 P の x, y 座標 P_x, P_y が半角スペース区切りで与えられます。
・2 行目には地点の数 N が与えられます。
・続く N 行目のうち i 行目には 地点 F_i の x, y 座標 x_i, y_i が与えられます。(1 ≦ i ≦ N)


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

地点 P にユークリッド距離が 1 番近い地点の番号
地点 P にユークリッド距離が 2 番目に近い地点の番号
地点 P にユークリッド距離が 3 番目に近い地点の番号
地点 P にマンハッタン距離が 1 番近い地点の番号
地点 P にマンハッタン距離が 2 番目に近い地点の番号
地点 P にマンハッタン距離が 3 番目に近い地点の番号


地点 P からのユークリッド距離が近い 3 地点の番号と、地点 P からのマンハッタン距離が近い 3 地点の番号を出力してください。距離が同じ地点が複数存在する場合、地点の番号が小さい地点ほど近い地点であるものとしてください。

条件

・3 ≦ N ≦ 100
・1 ≦ P_x, P_y ≦ 1000
・1 ≦ x_i, y_i ≦ 1000 (1 ≦ i ≦ N)

入力例1

100 100
3
103 103
101 105
102 104

出力例1

1
3
2
1
2
3

入力例2

100 100
3
100 100
123 123
120 120

出力例2

1
3
2
1
3
2

問題一覧へ戻る

ページの先頭へ戻る