Titulo
Muestra
Ideas
La idea es muy simple. Primero juzgue que hay varios números en los datos de entrada. Si es mayor que tres, generará directamente NO. Si es menor que tres, generará directamente SÍ. Salida SÍ, de lo contrario NO.
Reflexion
Al hacerlo en la clase, sin tener en cuenta la diferencia, la salida es directamente igual a tres, lo que resulta en solo unas pocas décimas (cubriendo la cara).
Atencion
El límite de datos para esta pregunta es 10 ^ 15. Se debe usar el tipo largo en lugar de int.
Código
#include <iostream>
#include <string.h>
#include <vector>
#include <algorithm>
using namespace std;
vector<long long> v,vt;
long long t, n, q, flag;
bool cmp1(long long a, long long b)
{
return a < b;
}
int main()
{
scanf("%d", &t);
for (long long i = 1; i <= t; i++)
{
v.clear();
vt.clear();
flag = 0;
scanf("%lld", &n);
for (long long j = 1; j <= n; j++)
{
scanf("%lld", &q);
v.push_back(q);
}
sort(v.begin(), v.end(), cmp1);
for (long long j = 0; j < n-1; j++)
{
if (v[j] != v[j + 1])
{
vt.push_back(v[j]);
flag++;
}
}
vt.push_back(v[n-1]);
if (flag <= 1)
printf("YES\n");
else if(flag==2&&(vt[2]-vt[1])==(vt[1]-vt[0]))
printf("YES\n");
else
printf("NO\n");
}
return 0;
}