100 atcoder#ABC139F. [ABC139F] Engines

[ABC139F] Engines

配点: 600600

問題文

E869120 君は最初、22 次元平面上の原点 (0,0)(0, 0) に立っています。

彼は NN 個のエンジンを持っています。エンジンの使い方と機能は以下のようになります。

  • ii 個目のエンジンを使うと、E869120 君のいる場所の X 座標が xix_i、Y 座標が yiy_i 変化する。つまり、E869120 君が座標 (X,Y)(X, Y) にいるときに ii 個目のエンジンを使うと、座標 (X+xi,Y+yi)(X + x_i, Y + y_i) に移動する。
  • エンジンはどのような順番で使ってもよいが、各エンジンは 11 回までしか使えない。ただし、使わないエンジンがあってもよい。

彼は、原点から最も遠い場所に行きたいです。 最後に到達する地点の座標を (X,Y)(X, Y) として、原点からの距離 X2+Y2\sqrt{X^2 + Y^2} の最大値を求めてください。

制約

  • 1N1001 \leq N \leq 100
  • 1 000 000xi1 000 000-1 \ 000 \ 000 \leq x_i \leq 1 \ 000 \ 000
  • 1 000 000yi1 000 000-1 \ 000 \ 000 \leq y_i \leq 1 \ 000 \ 000
  • 入力はすべて整数

入力

入力は以下の形式で標準入力から与えられる。

NN

x1x_1 y1y_1

x2x_2 y2y_2

:: ::

xNx_N yNy_N

出力

最後に到達する地点の、原点からの距離の最大値を実数値として出力せよ。 ただし、実際の答えとの相対誤差または絶対誤差が 101010^{-10} 以内であれば正解とみなす。

3
0 10
5 -5
-5 -5
10.000000000000000000000000000000000000000000000000

うまくエンジンを使うと、最後に到達する地点の、原点からの距離を 1010 にすることができます。 これには次の 33 通りの方法があります。

  • エンジン 11 を使って (0,10)(0, 10) に移動する
  • エンジン 22 を使って (5,5)(5, -5) に移動し、その後エンジン 33 を使って (0,10)(0, -10) に移動する
  • エンジン 33 を使って (5,5)(-5, -5) に移動し、その後エンジン 22 を使って (0,10)(0, -10) に移動する

距離を 1010 より大きくする方法はないので、最大値は 1010 となります。

5
1 1
1 0
0 1
-1 0
0 -1
2.828427124746190097603377448419396157139343750753

最後に到達する地点の、原点からの距離の最大値は 22=2.82842...2 \sqrt{2} = 2.82842... となります。 これを達成する方法として、次のようなものが挙げられます。

  • エンジン 11 を使って (1,1)(1, 1) に移動し、その後エンジン 22 を使って (2,1)(2, 1) に移動し、最後にエンジン 33 を使って (2,2)(2, 2) に移動する
5
1 1
2 2
3 3
4 4
5 5
21.213203435596425732025330863145471178545078130654

エンジン $1 \rightarrow 2 \rightarrow 3 \rightarrow 4 \rightarrow 5$ の順で全部使うと、最終的に (15,15)(15, 15) にたどり着き、原点からの距離は 152=21.2132...15 \sqrt{2} = 21.2132... となります。

3
0 0
0 1
1 0
1.414213562373095048801688724209698078569671875376

(xi,yi)=(0,0)(x_i, y_i) = (0, 0) である、何の意味も持たないエンジンがある可能性もあります。

1
90447 91000
128303.000000000000000000000000000000000000000000000000

11 個しかエンジンがない場合もあることにご注意ください。

2
96000 -72000
-72000 54000
120000.000000000000000000000000000000000000000000000000

22 個しかエンジンがない場合もあります。

10
1 2
3 4
5 6
7 8
9 10
11 12
13 14
15 16
17 18
19 20
148.660687473185055226120082139313966514489855137208