Secret Meeting (teleport2) 10/100

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;
}

E’ un errore molto banale, prova a rivedere l’ordine degli if :wink:

Okay grazie mille trovato l’errore, ho verificato per primo il fatto che i bugs si trovassero entrambi dentro il letto.

1 Mi Piace