【Codeforce Contest 1593 D】

https://codeforces.com/contest/1593/problem/D1

分析

求最大公因子。

#include <bits/stdc++.h>
using namespace std;  
#define LL long long
int t,n,a[45],d[45];
int find(int a,int b)
{
	if(a>b)swap(a,b);
	int r=b%a;
	while(r)
	{
		b=a;
		a=r;
		r=b%a;
	}
	return a;
}
int judge(int j)
{
	int i=j,a=d[j],b=0;
	for(;i<n-1;i++)
	{
		if(d[i]!=d[j])
		{
			b=d[i];
			break;
		}
	}
	if(i==n-1)return d[j];
	int now_ans=find(a,b);
	for(;i<n-1;i++)now_ans=find(now_ans,d[i]); 
	return now_ans;
}
int main()
{
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		for(int i=0;i<n;i++)scanf("%d",&a[i]);
		sort(a,a+n);
		for(int i=0;i<n-1;i++)d[i]=a[i+1]-a[0];
		sort(d,d+n-1);
		if(d[n-2]==0)printf("-1\n");
		else 
		{
			int j=0;
			while(d[j]==0)j++;
			int ans=judge(j);
			printf("%d\n",ans);
		} 
	}
    return 0;
}	
上一篇:Leetcode Weekly Contest 264(字符串、DFS)


下一篇:[Leetcode Weekly Contest]262