TOPIC

PROBLEM 1554 - URI Fórum 1.0

URI Online Judge asked 6 years ago

URI Online Judge Fórum 1.0

MOD

This topic was solved and cannot recieve new replies.

  • Gustavo Souza Azevedo replied 5 years ago

    WA(80%) Alguém tem mais casos teste ? Someone have more case tests ?

    #include <stdio.h>
    #include <stdlib.h>
    #include <stddef.h>
    #include <string.h>
    #include <math.h>
    
    struct plano
    {   int x;
        int y;
    };
    struct respostas
    {
        int r;
    };
    struct posicao
    {
        int  p;
    };
    
    int main(int argc, char* argv[]){
        int c, i, n, j, m, k = 0;
        scanf_s("%d", &c);
    
        struct respostas *res = calloc(c, sizeof(struct respostas));
        for (i = 0; i < c; i++){
            scanf_s("%d", &n);
    
            struct plano *t = calloc(n + 1, sizeof(struct plano));
            for (j = 0; j < n + 1; j++){
                scanf_s("%d", &(t[j].x));
                scanf_s("%d", &(t[j].y));           
            }
            struct posicao *pos = calloc(n + 1, sizeof(struct posicao));
    
            for (m = 0; m < n; m++){
                pos[m].p= sqrt((t[m+1].x - t[0].x)^2 + (t[m+1].y - t[0].y)^2);
    
            }
    
            for (j = 0; j <n; j++){ 
                if (k>pos[j].p){
                    res[i].r = j + 1;
                    k = pos[j].p;
                }
                if (j == 0){
                    res[i].r = j + 1;
                    k = pos[j].p;           
                }
    
            }
    
            free(pos);
            pos = NULL;
            free(t);
            t = NULL;
    
        }
        for (j = 0; j <c; j++){
            printf("%d\n", res[j].r);
    
        }
    
        free(res);
        res = NULL;
    
        system("pause");
        return 0;
    }
  • Jairo S. replied 5 years ago

    Seu erro está aqui:

    if ( *pd > d){ //se a bola menor for maior do que o atual menor

    Veja as mensagens dos usuários acima, eles tiveram o mesmo problema que você.

    Obs.: Quando você for postar código, posta o arquivo inteiro, incluindo os headers. Facilita na hora que a gente vai compilar.

  • OtavioHenrique replied 5 years ago

    Todas consultas estão dando certo, porem ainda da wrong

    scanf ("%d", &c);  //escolhe o numero de consultas
    
    for (i = 0; i < c; i++){ //laço consultas
    
        pd = &menor_resultado; //ponteiro menor resultado
        g = &menor_bola; //ponteiro menor bola 
         scanf ("%d", &n);  //numero de bolas
    
    if (n >= 2){ //se o numero de bolas for maior ou igual a 2
    
            for (j = 0; j <= n+1;j++){ //laço numero de bolas
                if (j == 0){ //se for a primeira bola (numero 0) fazer
                scanf ("%d", &bx);  //coordenada x bola branca
                scanf ("%d", &by);  //coordenada y bola branca
                    px = &bx; //ponteiro px aponta para coordenada x da bola branca
                    py = &by; //ponteiro py aponta para coordenada y da bola branca   
                    j++;    
                 } //acaba esse laço    
                        scanf ("%d", &x); //scan coordenada x bola normal  
                        scanf ("%d", &y); //scan coordenada y bola normal
                        d = sqrt((pow(x - *px , 2)) + (pow(y - *py , 2))); //calcula a distancia entre as bolas
    
                                if ( j == 1){       //se for a primeira bola    
                                    *pd = d;        //ponteiro resultado menor automaticamente aponta para o resultado
                                    aux = j;      
                                      *g = aux;     //ponteiro que marca o numero da menor bola
    
                                  }  //end if   
    
                                    if ( *pd > d){ //se a bola menor for maior do que o atual menor bola        
                                        *pd = d;   //menor resultado fica sendo essa
                                          aux = j;  
                                          *g = aux;      //ponteiro menor bola aponta para essa bola
                                              j++; 
                                    } //end if
    
    }
            printf("%d\n", menor_bola);  //printa a menor bola
    }  
    else {                            //se for apenas uma bola
        scanf ("%d", &fx);            //fake
        scanf ("%d", &fy);           //fake
        scanf ("%d", &fx1);           //fake
        scanf ("%d", &fy1);           //fake
        printf("%d\n", a);            //printa o numero um
    }
             }       
        return 0;
    }
  • Marlon Mendes replied 5 years ago

    Também tomei WA (10%), por conta de precisão. Você deve levar em conta a margem de erro fornecida pelo problema para fazer as comparações entre as distâncias das bolas. Se fizer somente (d1 < d2), onde d1 e d2 são números de ponto flutuante, você receberá WA.

  • Unknown replied 5 years ago

    10% Wrong Answer ... Alguém teria mais casos de teste?