题意:
给定一个序列a,判断是否存在一个数K,使得一些数加上K,一些数减去K,一些数不变,使得整个序列中所有的数相等。序列长度n<10^4, 数字|ai|<10^15。
思路:
读入序列a后进行升序排序,判断序列不同的数字有几个。全部相同或有两个不同的数字:满足条件;有三个不同的数字b1<b2<b3,若b3-b2=b2-b1则满足条件;其余情况不满足条件。
总结:
一道很简单的模拟题,对应CSP T1。应稳稳地拿下100分。
代码:
#include <iostream>
#include <algorithm>
using namespace std;
long long int t,n,a[10010];
long long int b1,b2,b3;
int cnt; //数字不重复的个数
bool ans=1; //YES
int main()
{
cin>>t;
for(int zs=0;zs<t;zs++)
{
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n); //升序排序
b1=a[0],b2=a[0],b3=a[0];
cnt=1,ans=1;
for(int i=1;i<n;i++)
{
if(cnt==1&&a[i]!=b1)
{
cnt++;
b2=a[i];
b3=a[i];
}
else if(cnt==2&&a[i]!=b1&&a[i]!=b2)
{
cnt++;
b3=a[i];
}
else if(cnt==3&&a[i]!=b1&&a[i]!=b2&&a[i]!=b3)
{
ans=0;
break;
}
}
if(ans==0) cout<<"NO"<<endl;
else //排除有三个以上不同的数字
{
//全一样
if(cnt==1)
cout<<"YES"<<endl;
//两个一样
else if(cnt==2)
cout<<"YES"<<endl;
//都不一样
else
{
if(b3-b2==b2-b1)
cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}
}
}