集合
http://202.197.224.59/exam/index.php/problem/read/id/1273
题目描述
对于包含整数多值集合A={a1,a2,⋯,an},执行以下两步操作
1.将某些元素加上整数x
2.将某些元素减掉整数y
请问能否使得A的元素全部相等?
输入
第一行是一个整数K(1≤K≤100),表示样例的个数。
每个样例的第一行是一个整数n(1≤n≤100,000)。
第二行是{ai|i=1,2,⋯n},0≤ai≤1,000,000,000。
输出
每行输出一个样例的结果,如果可以使得元素全部相等输出”Yes”,否则输出”No”
样例输入
2
5
2 1 2 1 3
5
1 2 3 4 5
样例输出
Yes
No
思路:分三种情况考虑。
如果集合里已经有4种以上的元素,那么无论怎么操作,都是No
如果集合里只有3种及以下的元素,那么一定可满足题意,是Yes
现在暴力处理4种元素的组合情况,看是否能满足题意即可。
#include<bits/stdc++.h>
using namespace std;
#define ll __int64
#define r(n) scanf("%I64d",&n)
set<ll>::iterator it;
ll a,b,c,d,q,w,e;
int main()
{
set<ll>x;
ll t;
r(t);
while(t--)
{
x.clear();
ll n;
r(n);
while(n--)
{
r(a);
x.insert(a);
}
int ok=0;
ll s = x.size();
if(s<=3)cout<<"Yes\n";
else if(s>4) cout<<"No\n";
else
{
it = x.begin();
a = *it;it++;
b = *it;it++;
c = *it;it++;
d = *it;
q = b-a;
w = c-a;
e = d-a;
if(q+w==e||q-w==e||w-q==e)
ok=1;
if(q+e==w||q-e==w||e-q==w)
ok=1;
if(e+w==q||e-w==q||w-e==q)
ok=1;
cout<<((ok)?"Yes\n":"No\n");
}
}
return 0;
}
//1396K 2046ms