atcoder#AGC062D. [AGC062D] Walk Around Neighborhood

[AGC062D] Walk Around Neighborhood

配点 : 11001100

問題文

二次元平面の原点 (0,0)(0,0) にメモ帳を持った高橋君がいます。メモ帳には NN 個の偶数 Di (1iN)D_i\ (1\leq i \leq N) が書かれています。

これから高橋君は二次元平面上で以下の行動を NN 回行います。

  • メモ帳に書かれている偶数を 11 つ選んで消す。選んだ偶数を dd としたとき、マンハッタン距離でちょうど dd だけ離れた点へ移動する。より正確には、現在高橋君がいる点の座標を (x,y)(x,y) としたとき、xx+yy=d|x-x'|+|y-y'|=d を満たす点 (x,y)(x',y') へ移動する。

NN 回の行動を行った後、高橋君は原点 (0,0)(0,0) に戻っていなければなりません。

そのように NN 回の行動を行うことができるか判定してください。可能な場合、ii 回目の行動を終えた後高橋君がいる座標を (xi,yi)(x_i,y_i) としたときの max1iN(xi+yi)\displaystyle \max_{1\leq i \leq N}(|x_i|+|y_i|) の最小値を求めてください(この値は整数になることが証明できます)。

制約

  • 1N2×1051 \leq N \leq 2 \times 10^5
  • 2Di2×1052 \leq D_i \leq 2 \times 10^5
  • Di (1iN)D_i\ (1\leq i \leq N) は偶数
  • 入力される値はすべて整数

入力

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

NN

D1D_1 D2D_2 \dots DND_N

出力

上記のように NN 回の行動を行うことが不可能な場合、-1 を出力してください。可能な場合、max1iN(xi+yi)\displaystyle \max_{1\leq i \leq N}(|x_i|+|y_i|) の最小値を整数で出力してください。

3
2 4 6
4

高橋君が 11 回目から 33 回目の行動でそれぞれ 2,6,42,6,4 をメモ帳から消し、 $(0,0)\rightarrow (0,2) \rightarrow (-4,0) \rightarrow (0,0)$ と移動すると max1iN(xi+yi)\displaystyle \max_{1\leq i \leq N}(|x_i|+|y_i|)44 になり、これが最小です。

5
2 2 2 2 6
3

高橋君が 11 回目から 55 回目の行動でそれぞれ 2,2,6,2,22,2,6,2,2 をメモ帳から消し、 $(0,0)\rightarrow (\frac{1}{2},\frac{3}{2})\rightarrow (0,3) \rightarrow (0,-3) \rightarrow (-\frac{1}{2},-\frac{3}{2}) \rightarrow (0,0)$ と移動すると max1iN(xi+yi)\displaystyle \max_{1\leq i \leq N}(|x_i|+|y_i|)33 になり、これが最小です。

高橋君は格子点以外にも移動できます。

2
2 200000
-1

高橋君は上記のように NN 回行動した後、原点に戻ることはできません。