TOPIC
PROBLEM 1554 - URI Fórum 1.0
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.