Salve a tutti, premetto che questo è il mio primo post in assoluto sul forum. Ho riscontrato un problema con teleport2 in quanto ottengo sempre e solo 10 punti pure sembrandomi corretta la soluzione; di seguito il mio codice commentato. Illuminatemi su eventuali miei errori o sviste, grazie in anticipo.
#include <stdio.h>
#include <assert.h>
#include <math.h>
int T, i;
int Xa, Ya, Xb, Yb, Xc, Yc, R;
double result = 0;
//funzione che calcola la distanza tra blatte senza passare dal letto
double sd (int Xa, int Ya, int Xb, int Yb)
{
return sqrt(pow(Xa-Xb, 2)+pow(Ya-Yb, 2));
}
//funzione che calcola la distanza tra blatte passando dal letto (sommo la distanza delle blatte dal centro del letto e tolgo il raggio * 2 (distanza tra il bordo e il centro del letto))
double bd (int Xa, int Ya, int Xb, int Yb, int Xc, int Yc, int R)
{
double tmp1=sqrt(pow(Xa-Xc, 2)+pow(Ya-Yc, 2));
double tmp2=sqrt(pow(Xb-Xc, 2)+pow(Yb-Yc, 2));
return (tmp1+tmp2)-(R*2);
}
int main() {
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
assert(1 == scanf("%d", &T));
for(i=0; i<T; i++)
{
assert(7 == scanf("%d %d %d %d %d %d %d",
&Xa, &Ya, &Xb, &Yb, &Xc, &Yc, &R));
//se a è dentro il letto calcolo la distanza di b dal bordo
if((sd(Xa, Ya, Xc, Yc)<=R))
{
result=(sqrt(pow(Xb-Xc, 2)+pow(Yb-Yc, 2))-R);
}
//se b è dentro il letto calcolo la distanza di a dal bordo
else if((sd(Xb, Yb, Xc, Yc)<=R))
{
result=(sqrt(pow(Xa-Xc, 2)+pow(Ya-Yc, 2))-R);
}
//se entrambe sono sul letto non fanno rumore
else if ((sd(Xa, Ya, Xc, Yc)<=R)&&(sd(Xb, Yb, Xc, Yc)<=R))
{
result=0;
}
//se tutte e due sono fuori dal letto
else
{
//confronto se conviene passare dal letto o meno
if(sd(Xa, Ya, Xb, Yb)<bd(Xa, Ya, Xb, Yb, Xc, Yc, R))
result=sd(Xa, Ya, Xb, Yb);
else result=bd(Xa, Ya, Xb, Yb, Xc, Yc, R);
}
result = floor(result * 1000000) / 1000000;
printf("%.6f\n", result);
result=0;
}
return 0;
}