XTU 1273 Set

Set题目描述

对于包含整数多值集合A={a1,a2,⋯,an},执行以下两步操作

将某些元素加上整数x
将某些元素减掉整数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

思路

这个题首先要做的是统计数字的种类,然后分情况判断。
当有三种数的时候,通过执行那两步操作是一定可以使A的元素全部相等的,当有五种数时,一定不可以使A的元素全部相等。当有四种数时,则需要满足两两等差的条件才可以(例如:当四个数为1,4,5,8时,满足8-5=4-1,1和5先加上三得到四个数为4,4,8,8,两个8减去4就能得到相同的4个数),否则不能。

代码

#include<stdio.h>
int main()
{
    int K;
    scanf("%d",&K);
    while(K--)
    {
        int n,sum=1;
        scanf("%d",&n);
        int stra[100001],strb[100001];
        for(int i=0; i<n; i++)
        {
            scanf("%d",&stra[i]);
        }
        strb[0]=stra[0];
        for(int i=1; i<n; i++)
        {
            int flag=1;
            for(int j=0; j<sum; j++)
            {
                if(stra[i]==strb[j])
                {
                    flag=0;
                    break;
                }
            }
            if(flag==1)
            {
                strb[sum]=stra[i];
                sum+=1;
            }
       }
       if(sum>4)
            printf("No\n");
       else if(sum<4)
            printf("Yes\n");
       else
       {
           for(int i=0;i<3;i++)
           {
               for(int j=0;j<3-i;j++)
               {
                   if(strb[j]>strb[j+1])
                   {
                       int q=strb[j];
                       strb[j]=strb[j+1];
                       strb[j+1]=q;
                   }
                }
           }//排序
           if((strb[3]-strb[1])==((strb[2]-strb[0])))
                printf("Yes\n");
           else  printf("No\n");
        }
    }
    return 0;  
 }              

本人菜鸡一枚,如有不对,欢迎指正

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值