A-HRZ的序列
题目描述
题目思路
这个题目我们可以经过分析答案总共有三种情况:
1.数据中有两种数,此时满足情况,输出YES
2.数据中有三种数,此时需要判断,这里我们是求最小数和最大数的中位数,然后判断这个中位数和中间的那个数是否相同,相同即是YES,否则是NO
3.数据中大于三种数,此时不满足情况,输出NO
这个题目刚开始做的时候我想得太复杂,没有考虑到数据的情况,只想着去模拟。
这个题目中我们可以巧妙的使用set来去除重复,统计数据的种数。
实现代码
//#include <bits/stdc++.h>
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <set>
#define _for(i,a,b) for(int i = (a); i < (b); i++)
#define _rep(i,a,b) for(int i = (a); i <= (b); i++)
using namespace std;
const int MAXN = 1e4 + 10;
int t,n;
long long a[MAXN];
set<long long> s;
bool flag;
long long sum,avg;
long long ans;
int main()
{
scanf("%d",&t);
_for(i,0,t)
{
s.clear();
scanf("%d",&n);
if(n != 2)
{
_for(j,0,n)
{
scanf("%lld",&a[j]);
s.insert(a[j]);
}
if(s.size() <= 2) printf("YES\n");
else if(s.size() > 3) printf("NO\n");
else{
sort(a,a+n);
ans = (a[0] + a[n-1]) / 2;
if(s.find(ans) != s.end())
printf("YES\n");
else
printf("NO\n");
}
}
}
}