训练题目B
题目大意:
假设有7个数a,b,c,d,e,f ,g,从中选出一个数比如x,然后用 x 加上或减去7个数,先假设最后可以相等。当所给的数本来就相等,那就不用算了。当所给的数不相等,假设 a+x=b+x=c+x=d=e-x=f-x=g-x,这是其中一种情况,这种情况说明原来的数中其实a=b=c,并且e=f=g,相当于只有a,e,d三个数,然后再列出其它情况。其实这里推想一下也可以想明白了, 所给的数如果超过三个不相等,那结果肯定是 “NO”,少于三个是 “YES”, 三个的时候需要满足 (大+小)=2*中。
>在这里我们只需要关注一下set的用法就可以;
#include<bits\stdc++.h>
using namespace std;
long long n;
int main(){
long long i;
scanf("%lld",&n);
set<long long>a;//存在A里面
int temp;
for(i=0;i<n;i++){
scanf("%lld",&temp);
a.insert(temp);
}
if(a.size()>3){
printf("NO");
return 0;
}
else if(a.size()<3){
printf("YES");
return 0;
}
set<long long>::iterator x=a.begin();
long long one=*x;
long long two=*(++x);
long long there=*(++x);
if(one+there==2*two)
printf("YES");
else printf("NO");
return 0;
}