D1. All are Same
题意:给定n个整数。你可以选择一个k,将其中任意一个整数减k。重复以上操作直到它们相同。问最大的k是多少?如果这个k可以无限大,输出-1。
题解:求出它们的差分序列。最大k是这个差分序列的GCD。当给定的n个整数都相同时,k可以无限大。
#coding=utf-8
import sys,math
DEBUG = 0
if DEBUG==1:
data = open('1.in', 'r')
#sys.stdout = open('tmp.out', 'w')
def readline():
if DEBUG == 1:
return data.readline().strip('\r\n')
else:
try:
return input().strip('\r\n')
except EOFError:
return ''
def readi():
return [int(t) for t in readline().split()]
tc, = readi()
for _ in range(tc):
n, = readi()
a = readi()
b = [0]*n
b[0] = a[0]
summ = 0
for i in range(1,n):
b[i] = a[i]-a[i-1]
summ += b[i]
same = True
for i in range(1,n):
if b[i]!=0:
if abs(b[i])!=abs(b[0]):
same = False
if summ==0 and same:
print(-1)
else:
#print(b)
v = b[1] #gcd
for i in range(2,n):
v = math.gcd(v,abs(b[i]))
print(v)
if DEBUG==1:
data.close()