首页 > 试题广场 > 相等序列
[编程题]相等序列
  • 热度指数:1675 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
题目给定a1,a2...an,这样一个长度为n的序列,现在你可以给其中一些元素加上一个值x(只能加一次),然后可以给另外一些值减上一个值x(只能减一次),剩下的元素不能再进行操作。问最后有没有可能找到一个值x使所有元素的值相等。

输入描述:
输入第一行为一个整数k,代表有k个序列(k<100),接下来有2*k行:
偶数行为一个整数n,代表给定序列的长度(1<=n<=100,000)
奇数行包含n个元素,a1,a2...an,代表序列中的元素(0<=ai<=100,000)



输出描述:
输出k行,每行一个YES或者NO
示例1

输入

1
5
1 3 3 2 1

输出

YES
#include <bits/stdc++.h>
using namespace std;
int main(){
    int k;
    cin>>k;
    for(int i=0;i<k;i++){
        int n,t;
        cin>>n;
        set<int> hashset;
        for(int j=0;j<n;j++){
            cin>>t;
            hashset.insert(t);
        }
        set<int>::iterator it=hashset.begin();
        string ans;
        if(hashset.size()<3)
            ans="YES";
        else if(hashset.size()==3)
            ans= *(++it) * 2 ==*hashset.begin() + *hashset.rbegin() ? "YES":"NO";
        else
            ans="NO";
        cout<<ans<<endl;
    }
    return 0;
}

发表于 2019-10-21 10:10:09 回复(0)
#include <bits/stdc++.h>
using namespace std;

int main(){
    int k,n;
    cin>>k;
    while(k--){
        cin>>n;
        int a[n];
        set<int> s;
        for(int i=0;i<n;i++){
            cin>>a[i];
            s.insert(a[i]);
        }
        if(s.size()<=2)
            cout<<"YES"<<endl;
        else if(s.size()==3){
            vector<int> v;
            for(set<int>::iterator it=s.begin();it!=s.end();it++)
                v.push_back(*it);
            if(v[2]-v[1]==v[1]-v[0])
                cout<<"YES"<<endl;
            else
                cout<<"NO"<<endl;
        }else
            cout<<"NO"<<endl;
    }
    return 0;
}

发表于 2019-08-20 03:49:32 回复(0)
//当序列中的数字种类大于3种,一定为NO,小于3种,一定为YES;
#include <iostream>
#include <vector>
#include <set>
using namespace std;
int main()
{ 
    int k;
    cin >> k;
    while (k > 0) {
        int l;
        cin >> l;
        set<int> data;//用一个set记录数字种类
        while (l > 0) {
            int n;
            cin >> n;
            data.insert(n);
            l--;
        }
        vector<int> Num;
        Num.assign(data.begin(), data.end());
        if (Num.size() >= 4) cout << "NO" << endl;//>=4,为NO
        else if (Num.size() <= 2) cout << "YES" << endl;//<=2,为YES
        else {
            if (Num[2]-Num[1]==Num[1]-Num[0]) cout << "YES" << endl;//==3时进一步判断
            else cout << "NO" << endl;
        }
        k--;
    }
    return 0;
}

发表于 2019-07-30 15:42:28 回复(0)
%MATLAB代码
try
while 1
    temp1=[];
    temp1=input('');
    for i=1:temp1
        temp2=[];
        temp3=[];
        temp2=input('');
        temp3=input('','s');
        temp3=str2num(temp3);
        if length(unique(temp3))<=3
           if length(unique(temp3))<=2
              disp('YES')
           else
              temp4=unique(temp3);
              temp5=sort(temp4);
              if (temp5(1)+temp5(3))/2==temp5(2)
                 disp('YES')
              else
                 disp('NO')
              end
           end
        else
           disp('NO')
        end
     end
end
end

发表于 2019-09-21 14:23:34 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        int k = sc.nextInt();
        int n;
        int[] arr;
        for(int i=0;i<k;i++)
        {
            n = sc.nextInt();
            arr = new int[n];
            for(int j=0;j<n;j++)
            {
                arr[j] = sc.nextInt();
            }
            if(arr.length<=2)
            {
                System.out.println("YES");
            }
            else{
                if(cando(arr))
                {
                    System.out.println("YES");
                }
                else{
                    System.out.println("NO");
                }
            }
        }
    }
    static boolean cando(int[] arr)
    {
        int max = max(arr);
        int min = min(arr);
        if((max-min)%2!=0)
        {
            return false;
        }
        int x = (max-min)/2;
        int flag = x+min;
        for(int i=0;i<arr.length;i++)
        {
            if(arr[i]!=min && arr[i]!=max && arr[i]!=flag)
            {
                return false;
            }
        }
        return true;
    }
    static int max(int[] arr)
    {
        int out = Integer.MIN_VALUE;
        for(int i=0;i<arr.length;i++)
        {
            out = Math.max(out,arr[i]);
        }
        return out;
    }
    static int min(int[] arr)
    {
        int out = Integer.MAX_VALUE;
        for(int i=0;i<arr.length;i++)
        {
            out = Math.min(out,arr[i]);
        }
        return out;
    }
}

发表于 2019-08-29 09:39:10 回复(0)
当序列中的数字种类大于3种,一定为NO,小于3种,一定为YES;只需要判断等于3种的时候,是不是个等差数列。
k = int(input().strip())
 
for _ in range(k):
 
    n = int(input().strip())
    nums = list(map(int, input().strip().split(" ")))
 
    nums = set(nums)
    if len(nums) > 3:
        print("NO")
    elif len(nums) == 3:
        nums = list(nums)
        nums.sort()
        if nums[1] - nums[0] == nums[2] - nums[1]:
            print("YES")
        else:
            print("NO")
    else:
        print("YES")

发表于 2019-08-28 14:40:12 回复(0)
n = int(input())
for i in range(n):
    m = int(input())
    num = list(map(int, input().split()))
    s = set(num)
    if len(s) > 3:
        print('NO')
    elif len(s) == 1 or len(s) == 2:
        print('YES')
    else:
        sor = sorted(list(s))
        a, b, c = sor[0], sor[1], sor[2]
        if a+c == b*2:
            print('YES')
        else:
            print('NO')

发表于 2019-08-19 10:29:18 回复(0)
import sys
m=int(input())
if __name__ == "__main__":
    data=[]
while True:
    line = sys.stdin.readline().strip()
    if not line:
        break
    data.append(line)

for i in range(m):
    n=int(data[2*i])
    ls=list(map(int,data[2*i+1].split()))
    if n<3:
        print("YES")
        continue
    dic={}
    lis=[]
    for j in ls:
        dic[j]=dic.get(j,0)+1
    if len(dic)==1:
        print("YES")
    elif len(dic)==3:
        for k,v in enumerate(dic):
            lis.append(v)
        lis.sort()
        if 2*lis[1]==(lis[0]+lis[2]):
            print("YES")
        else:
            print("NO")
    else:
        print("NO")
         
编辑于 2019-08-02 20:28:49 回复(0)