TOPIC
PROBLEM 1039 - URI Fórum 1.0
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
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 includeint 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 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 includeint 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; }