描述:
给定一个序列,对于每一个元素,只能 + 或者 - 一个数val。这个数一旦选定,就不能改。
问能否变成全部数字都一样。
思路:先用set维护有几个不同数字,然后分类讨论,特别要注意有三个不同数字的时候一定要满足a[0]+a[2]==2*a[1]
代码:
#include <bits/stdc++.h>
using namespace std;
set<int>s;
int a[4];
int main(){
std::ios::sync_with_stdio(false);
std::cin.tie(0);
int n;
cin>>n;
int x;
for(int i=0; i<n ;i++){
cin>>x;
s.insert(x);
}
if(s.size()>3)puts("NO");
else if(s.size()==3){
int now=0;
for(set<int>::iterator it=s.begin(); it!=s.end(); it++){
a[now++]=*it;
}
sort(a, a+3);
if(a[0]+a[2]==2*a[1])puts("YES");
else puts("NO");
}
else puts("YES");
return 0;
}