Codeforces714B【读题-水】
题意:
给你n个数,然后让你自己选择X,先选择一些+一次;然后选择一些-一次。
思路:
首先要去判断是不是不需要处理或者处理一次的情况;
其实这样的话,你不可能选x然后最小和最大都加减一次,所以肯定是(min+max)/2;
所以在判断一下;
#include <bits/stdc++.h>
using namespace std;
typedef __int64 LL;
const int N=1e5+10;
LL a[N];
int n;
int main()
{
LL mi,mx;
scanf("%d",&n);
mi=1e9+10;
mx=-1;
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
mi=min(a[i],mi);
mx=max(a[i],mx);
}
LL tmp;
bool flag=true;
tmp=mx-mi;
for(int i=1;i<=n;i++)
{
if(a[i]<mx)
{
if((a[i]+tmp)!=mx)
{
flag=false;
break;
}
}
}
if(flag)
{
puts("YES");
return 0;
}
if((mx+mi)%2)
{
puts("NO");
return 0;
}
flag=true;
tmp=(mx+mi)/2;
for(int i=1;i<=n;i++)
{
if(a[i]>tmp&&a[i]!=mx)
{
puts("NO");
return 0;
}
if(a[i]<tmp&&a[i]!=mi)
{
puts("NO");
return 0;
}
}
puts("YES");
return 0;
}