Codeforces Problem-1593D1 All are Same
题目链接
基本思想:
本题的大致意思为:给定一串数字,对于每个数都可以减k,使得最后这一串数的值都相等。
算法步骤:
1.去重:用一个set容器;
2.记录下相邻两项的差值:用差分数组b[i]=a[i]-a[i-1];
3.计算差分数组相邻两项的最大公约数;
4.若set容器大小为1,则输出-1。
AC代码:
#include <bits/stdc++.h>
using namespace std;
set<int> s;
int a[45],b[45];
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
int t;
cin>>t;
while (t--)
{
s.clear();
int ans=0;
int n;
cin>>n;
for (int i=0;i<n;i++)
{
int z;
cin>>z;
s.insert(z);
}
if (s.size()==1)
printf("-1\n");
else
{
set<int>::iterator it;
int i=0;
for (it=s.begin();it!=s.end();it++)
a[i++]=*it;
for (int j=1;j<s.size();j++)
b[j]=a[j]-a[j-1];
for (int j=1;j<s.size();j++)
ans=gcd(ans,b[j]);
cout<<ans<<endl;
}
}
return 0;
}