int main()
{ int t;
scanf("%d",&t);
while(t--){
long long int n,ind,a,b,c,min=1000000001,time=0,i;
scanf("%lld %lld %lld %lld",&n,&a,&b,&c);
long long int ar[n],m[n];
for(int i=0;i<n;i++)
{
scanf("%lld",&ar[i]);
m[i]=(ar[i]-a)*(ar[i]-a)+(ar[i]-b)*(ar[i]-b);
}
for(int i=0;i<n;i++)
{
if (min>m[i])
{
min=m[i];
ind=i;
}
}
if (ar[ind]>a)
{
i=ar[ind]-a;
}
else
i=a-ar[ind];
if (ar[ind]>b)
{
min=ar[ind]-b;
}
else
min=b-ar[ind];
time = c+min+i;
printf("%lld\n",time);
}
return 0;
}```
Please format your code, or at least link the submission, because just copy/pasting it makes it both ugly and actually messes up the code (for example, --
becomes -
, so it’s sometimes impossible to know what you actually meant to do).
1 Like
done
Your initial value for min
is too low, a case like this:
1
2 1 2 1
1000000000 100000
will crash your program since the variable ind
is never set.
Also, what’s the point in squaring the distances? I think in this particular case, it may not hurt you, but absolute value better represents the actual costs.
1 Like
i thought it will avoid many if else statements needed for absolute value calculations
There’s an abs
function (that works with integers and long longs) for exactly that reason.
1 Like
thanks