题目
题目思路
分析题目,满足条件的数据中最多有三种不同的数,且是等差数列。那么我们可以先排序,保证a[0]是数组中最小的数,枚举索引为1-(n-1)的数字
1、a[i]==a[0]:跳过
2、abs(a[0]-a[i])!=temp || abs(a[0]-a[i])!=2*temp:
将temp值更新,flag++
(对于满足条件的数组,其公差temp应该最多只有一个)
若flag>1,那么该组数据不满足条件,输出NO
注意:这道题本不应该错的,但是最后发现因为手误有个有个地方打错了(a[1]写成了a[i])然后错了。。下次一定要注意改代码的时候一定要确保要改的部分都更改正确。
代码实现
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
long long n,m,ans,flag;
long long a[10005],b[10005];
int main()
{
//freopen("a.txt","r",stdin);
cin>>m;
while(m--)
{
memset(a,0,sizeof(a));
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+n);
ans=-1;flag=0;
for(int i=2;i<=n;i++)
{
if(abs(a[i]-a[1])==0)
continue;
else{
if(abs(a[i]-a[1])!=ans&&abs(a[i]-a[1])!=2*ans)
{
flag++;
ans=abs(a[i]-a[1]);
}
}
}
if(flag>1) printf("NO\n");
else printf("YES\n");
}
return 0;
}