XTU 1273 set

集合
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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值