P - Making Arithmetic Progression Editorial /

Time Limit: 2 sec / Memory Limit: 1024 MiB

配点 : 100

問題文

長さ N の整数列 A = (A_1, A_2, ..., A_N) が与えられます。あなたは以下の操作を 0 回以上行うことができます。

  • 1 \leq i \leq N を満たす整数 i を一つ選び、 A_i-1 倍する。

全ての操作が終了した後に、 A を昇順に並び替えます。このときに A が等差数列となっているような操作方法が存在するか判定し、存在する場合は操作回数の最小値を求めてください。

T 個のテストケースが与えられるので、それぞれについて解いてください。

制約

  • 1 \leq T \leq 2 \times 10^5
  • 1 \leq N \leq 2 \times 10^5
  • -{10}^{13} \leq A_i \leq 10^{13}
  • すべてのテストケースにおける N の総和は 2 \times 10^5 以下
  • 入力はすべて整数

入力

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

T
\mathrm{case}_1
\mathrm{case}_2
\vdots
\mathrm{case}_T

各テストケースは以下の形式で与えられる。

N
A_1\ A_2\ ...\ A_N

出力

T 行出力せよ。i 行目には \mathrm{case}_i において列を等差数列にすることができるならば操作回数の最小値を、できないならば -1 を出力せよ。


入力例 1

4
5
-6 8 -2 10 4
5
-2 -2 -1 4 -1
3
1 9 5
1
5

出力例 1

2
-1
0
0

1 番目のテストケースでは、 i = 1i = 3 で操作を行うことで A = (6, 8, 2, 10, 4)となります。 昇順に並び替えると (2, 4, 6, 8, 10) となり、これは等差数列です。1 回以下の操作で等差数列とすることはできないため、答えは 2 になります。

2 番目のテストケースでは、どのように操作しても昇順に並び替えた列を等差数列とすることができません。