TOPIC

PROBLEM 1039 - URI Fórum 1.0

URI Online Judge asked 7 years ago

URI Online Judge Fórum 1.0

MOD

This topic was solved and cannot recieve new replies.

  • Unknown replied 4 years ago

    Não entendi o motivo de você analisar apenas a posição Y.

    De qualquer modo, a questão aqui é geométrica, e pode ser resumida em definir se o círculo da flor está contido no círculo do caçador.

    Elaborando... para que a condição acima seja satisfeita, então o raio do círculo do caçador precisa ser maior ou igual à distância entre os centros dos círculos, mais o raio do círculo da flor. Complicou? Acho que até fica mais simples, sem laços, apenas uma condição direta.

    Rc >= (Cf - Cc) + Rf

  • Gerson Groth replied 6 years ago

    Você está lendo apenas um caso de teste...

    Obs: Sempre que for postar seus códigos, utilize as tags code para manter o fórum organizado...

  • Shakib Haris replied 4 years ago

    Hi, I'm getting WA 10%...

    while True:
        try:
            Rh, Xh, Yh, Rf, Xf, Yf = [int(x) for x in input().split()]
        except EOFError:
            break
        if Xh - Rh > Xf - Rf or Xh + Rh < Xf + Rf or Yh - Rh > Yf - Rf or Yh + Rh < Yf + Rf:
            print('MORTO')
        else:
            print('RICO')
  • Raul Sena Ferreira replied 6 years ago

    Obrigado, Groth, com os seus 2 testes percebi que o meu erro estava no cálculo da equação da circunferência, problema resolvido. Att.

  • Gerson Groth replied 6 years ago

    Teste com os seguintes casos:

    63 1 35 21 25 76
    62 7 83 25 41 98
  • Gerson Groth replied 6 years ago

    Alguns casos de teste para quem está tendo problemas:

    6 1 3 1 2 7
    4 6 1 1 8 0
    2 6 8 0 6 0
    7 9 9 2 7 9
    4 2 0 2 8 9
    6 6 2 1 7 4
    8 2 3 1 5 3
    3 7 1 3 0 7
    4 7 8 5 2 5
    4 8 7 6 0 7
    3 3 4 2 4 5
    4 3 4 2 4 5
    RICO
    RICO
    MORTO
    RICO
    MORTO
    RICO
    RICO
    MORTO
    MORTO
    MORTO
    MORTO
    RICO
  • Igor Schechtel replied 4 years ago

    Aí galera, sei que ficou meio grande mas foi o que consegui pensar. Quando mando pro URI da Wrong Answer 100%. Nos casos de testes ta dando tudo certo, inclusive todos os exemplos que o @groth deu:

    [size=150:8yk6nr1g]Meu código:[/size:8yk6nr1g]

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    
    /* Calcula o y superior da circunferencia
     * em x dado o centro x1,y1 e o raio r1. */
    
    double yCircunferencia(double r1,double x1,double y1,double x)
    {
        double a, b, c, y;
    
        a = 1;
        b = -2*y1;
        c = x*x - 2*x1*x + x1*x1 + y1*y1 - r1*r1;
    
        y = 1.0*(-b + sqrt(b*b - 4*a*c))/(2*a);
    
        return y;
    }
    
    /* Calcula o y inferior da circunferencia
     * em x dado o centro x1,y1 e o raio r1. */
    
    double y2Circunferencia(double r1,double x1,double y1,double x)
    {
        double a, b, c, y;
    
        a = 1;
        b = -2*y1;
        c = x*x - 2*x1*x + x1*x1 + y1*y1 - r1*r1;
    
        y = 1.0*(-b - sqrt(b*b - 4*a*c))/(2*a);
    
        return y;
    }
    
    /* Verifica se o circulo 2 ultrapassa a 
     * borda do circulo 1 */
    
    int main()
    {
        double r1,x1,y1,r2,x2,y2;
    
        start:
    
        while(scanf("%lf%lf%lf%lf%lf%lf",&r1,&x1,&y1,&r2,&x2,&y2) != EOF) {
    
            /* Checando se os quatro extremos (superior,inferior,esquerdo e direito)
             * do circulo 2 ultrapassam algum dos extremos do circulo 1 */
    
            if (x2 + r2 > x1 + r1 || x2 - r2 < x1 - r1 || y2 + r2 > y1 + r1 ||  y2 - r2 < y1 - r1) {
                printf("MORTO\n");
                goto start;
            }
    
            /* Checando se o circulo 2 passa a borda do circulo um em algum momento
             * que nao nos extremos */
    
            double startingPoint = x1 - r1;
    
            while (startingPoint <= x1 + r1) {
                if (yCircunferencia(r1,x1,y1,startingPoint) < yCircunferencia(r2,x2,y2,startingPoint)) {
                    printf("MORTO\n");
                    goto start;
                }
                if (y2Circunferencia(r1,x1,y1,startingPoint) > y2Circunferencia(r2,x2,y2,startingPoint)) {
                    printf("MORTO\n");
                    goto start;
                }
                else startingPoint += 1;
            }
    
            printf("RICO\n");
            goto start;
        }
    
        return 0;
    }
  • Milanny Meirelles replied 4 years ago

    Olá, me ajudem a encontrar o que tem de errado nesse código? Já fiz varios testes e dá certo na IDE mas quando coloco no URI da Wrong answer.

    #include <stdio.h>
    #include <cmath>
    
    int main() {
        double Rc,x1,y1, Rf,x2,y2,dt;
    
        while (scanf("%lf %lf %lf %lf %lf %lf",&Rc, &x1, &y1, &Rf, &x2, &y2) > 0) {
    
            dt = sqrt(((x2-x1)*(x2-x1))+((y2-y1)*(y2-y1)));
            if (Rc <= dt+Rf)
                printf("MORTO\n");
            else
                printf("RICO\n");
        }
        return 0;
    }
  • Gabriel Bellussi replied 4 years ago

    Porque esses casos dão MORTO e MORTO? Sendo que o circulo da flor está dentro do circulo desenhado?

    63 1 35 21 25 76 62 7 83 25 41 98

    Meu código (10% WA):

    #include <stdio.h>
    
    main(){
    
        int xFlor=0,yFlor=0,xCac=0,yCac=0,rFlor=0,rCac=0;
    
        while(scanf("%d %d %d %d %d %d",&rCac,&xCac,&yCac,&rFlor,&xFlor,&yFlor)!=EOF)
        {
            int xMaxC=0, xMinC=0, yMaxC=0, yMinC=0;
    
            xMaxC = xCac + rCac;
            xMinC = xCac - rCac;
            yMaxC = yCac + rCac;
            yMinC = yCac - rCac;
    
            int xMaxF=0, xMinF=0, yMaxF=0, yMinF=0;
    
            xMaxF = xFlor + rFlor;
            xMinF = xFlor - rFlor;
            yMaxF = yFlor + rFlor;
            yMinF = yFlor - rFlor;
    
            if((xMaxC>=xMaxF&&xMinC<=xMinF&&yMaxC>=yMaxF&&yMinC<=yMinF)) printf("RICO\n"); else printf("MORTO\n");
            xFlor=0,yFlor=0,xCac=0,yCac=0,rFlor=0,rCac=0;
        }
    
    }

    Obs: Já tentei colocar para também verificar se o desenho é um circulo, mas mesmo assim não funcionou para os casos de teste que citei.

  • Marcus Antunius replied 5 years ago

    Usei a Distância Euclidiana e esse if e passou, alguém pode me explicar pq passou? kk

    if ((cacador.r2+CalculateDistance(flor.x,flor.y,cacador.x,cacador.y))<=flor.r1){
          cout<<"RICO"<<endl;
        }else{
          cout<<"MORTO"<<endl;
        }
  • Victor Hugo Braguim Canto replied 5 years ago

    O código está com 10% de erro e não consigo achar onde está errado. Alguém poderia ajudar?

    #include <stdio.h>
    #include <math.h>
    int main(void){
        int r1, x1, y1, r2, x2, y2;
        int distancia;
        while(scanf("%d %d %d %d %d %d", &r1, &x1, &y1, &r2, &x2, &y2) != EOF){
            x1 = abs(x1);
            y1 = abs(y1);
            x2 = abs(x2);
            y2 = abs(y2);
            distancia = sqrt(pow((x2-x1),2)+pow((y2-y1),2));
            printf("%d\n", distancia);
            if((distancia+r2)<=r1)
                printf("RICO\n");
            else
                printf("MORTO\n");
        }
        return 0;
    }

    Isso aqui deveria imprimir RICO, não MORTO, pois os valores das coordenadas, estão em módulo

    2 -2 -2 1 2 2
  • Gabriel Reseck replied 5 years ago

    Alguem poderia me dizer porque esse codigo está errado? Ele da 10% de erro.

    #include<iostream>
    #include<iomanip>
    #include<cmath>
    using namespace std;
    int main()
    {
        double R,X,Y,RF,XF,YF;
        while(cin>>R>>X>>Y>>RF>>XF>>YF){
        if(R+X<=RF+XF || R+Y<=RF+YF || Y-R>=YF-RF || X-R>=XF-RF)cout<<"MORTO"<<endl;
        else cout<<"RICO"<<endl;    
    }
    return 0;
    }
  • Robson Ribeiro replied 5 years ago

    As respostas que ele apresenta estão corretas, mas o código não é aceito. Qual o problema com o meu código?

    include include include

    int main() { int r1,x1,y1, r2,x2,y2; double d; scanf("%d %d %d %d %d %d",&r1, &x1, &y1, &r2, &x2, &y2); d = sqrt(((x2-x1)(x2-x1))+((y2-y1)(y2-y1))); if (r1 >= d+r2) printf("RICO\n"); else printf("MORTO\n"); return 0; }

  • Ricardo Negreiros replied 5 years ago

    Pq esse dá Morto, se o a area da flor fica totalmente dentro da área do circulo do caçador? Não entendo. Alguém poderia explicar?

  • Lucas Iemini replied 5 years ago

    por que estou recebendo WA 10%? alguem sabe? obrigado :)

  • Lucas Müller replied 5 years ago

    semnome, teste colocar a leitura como condição de parada dentro de um while, da seguinte maneira:

    while (cin >> r1 >> x1 >> y1 >> r2 >> x2 >> y2) {
        //Código
    }

    assim, quando não houver mais nada para ler ele irá sair do loop.

  • SemNome Tol replied 5 years ago

    Pessoal, não tô entendendo... A lógica do meu código tá certa, mas tá dando wrong anwser, visto que eu não entendi o que é ler até fim de arquivo (pra mim é se fosse um arquivo, não via console).

    Meu código:

    int x1, y1, r1, x2, y2, r2;
    
    cin >> r1 >> x1 >> y1 >> r2 >> x2 >> y2;
    
    double dist_centros = sqrt( pow((x2-x1), 2) + pow((y2-y1), 2) );
    
    if (r1 >= dist_centros+r2) {
    
        cout << "RICO" << endl;
    
    } else {
    
        cout << "MORTO" << endl;
    
    }

    Pensei que poderia ser pra por dentro de um loop infinito, onde o usuário para com ctrl + c.

  • Miguel Araújo replied 6 years ago

    Franck, Recebi Time Limit Exceed e não sei porque, alguém pode me ajudar?

    O problema está na condição de parada. Nesta linha:

    mude para:

    Assim ele só continua o while com a entrada de 6 variáveis.

    Acredito que assim você receberá AC.

  • Franck replied 6 years ago

    Recebi Time Limit Exceed e não sei porque, alguém pode me ajudar?

    include include include

    int main() { int r1, x1, y1, r2, x2, y2, i, t; int distanciax = 0, distanciay = 0, total = 0;

    while (scanf("%d %d %d %d %d %d", &r1, &x1, &y1, &r2, &x2, &y2))
    {
    
        distanciax = abs(x2-x1);
        distanciay = abs(y2-y1);
        total = sqrt(pow(distanciax,2) + pow(distanciay,2));
        if(r1 < r2)
            printf("MORTO\n");
        else
        {
            if(r1 >= r2 + total)
                printf("RICO\n");
            else
                printf("MORTO\n");
        }
    
    }
    return 0;

    }

  • Kelwin Henrique replied 6 years ago

    Nem ideia do que esta errado... testei com todos casos de teste que o pessoal postou e bate com todos, mas mesmo assim ainda continua dando 10% de erro. Alguma ideia do que seja? Desde ja obrigado.

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int r1=0,r2=0,x1=0,x2=0,y1=0,y2=0;
        while( scanf("%i %i %i %i %i %i",&r1,&x1,&y1,&r2,&x2,&y2) != EOF)
        {
                if((r1>=r2)&&(r1+y1>=r2+y2)&&(r1+x1>=r2+x2)&&(y1-r1<=y2-r2)&&(x1-r1<=x2-r2))
                    printf("RICO\n");
                else
                    printf("MORTO\n");
    
        }
    
        return 0;
    }
1 of 3