J题的难点无非是情况较多,细心讨论即可
def opt(x,y): return max(x,y) if abs(x) == abs(y) else min(x,y,key=abs) def solve(x,y,z): k,kr = divmod(y - z, x - y) b,br = divmod(x*z - y*y, x - y) return k, b, kr+br def main(): for _ in range(int(input())): n = int(input()) s = list(map(int,input().split())) if n == 1: print(1,0); continue if n == 2: if s[0] == 0: k,b = 1,s[1] else: k,b = divmod(s[1],s[0]) if k == 0: b = opt(s[1]-s[0],s[1]+s[0]) elif k == 1: b = opt(b,s[1]-s[0]*2) elif k == -1: b = opt(b,s[1]+s[0]*2) else: b = opt(b,s[1]-s[0]*(k+1)) b = opt(b,s[1]-s[0]*(k-1)) k = (s[1]-b)//s[0] print(k,b); continue if len(set(s)) == 1: print(1,0); continue if any(s[i] == s[i+1] for i in range(n-1)): print(-1); continue ans = None for i in range(n-2): k,b,r = solve(s[i],s[i+1],s[i+2]) if r: print(-1); break if ans is None: ans = (k,b) if ans != (k,b): print(-1); break else: print(*ans) main()