A-HRZ的序列
题目描述:
在这里插入图片描述
解题思路:
求是否存在一个K使得这个数组一部分+k一部分-k一部分不变,然后整个数组都相等。
①然后我们考虑到,如果这个数组原本就有四个及以上不相同的数时,那么这个K肯定不存在
②如果只有两种不同的数时,那么这个k就一定存在
③当有三个不同的数时,一定要满足,a+c=2*b,这样的K也就一定存在
我们将数组从小到大排列一下有利于后续操作
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
long long a[10010],b[3];
int n;
int number()
{
b[0]=a[1];
int j=1,i=1,cont=1;
while(i<=n)
{
if(a[i]!=a[++j])
{
i=j;
// cout<<i<<endl;
b[cont++]=a[i];
}
}
cont--;
return cont;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
//int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
std::sort(a+1,a+n+1);
int cont = number();
// cout<<"**"<<cont<<"**"<<endl;
int judge=-1;
int aa=b[0]+b[2];
int bb=b[1]*2;
// cout<<b[1]<<" "<<b[2]<<" "<<b[3]<<endl;
// cout<<aa<<" "<<bb<<endl;
if(aa==bb) judge=0;
if(cont<3) printf("YES\n");
else if(cont==3&&judge==0) {
// cout<<"******"<<endl;
printf("YES\n");
}
else printf("NO\n");
}
return 0;
}