Created
June 15, 2015 07:50
-
-
Save rogerioagjr/44fcfaadd16d864c05f8 to your computer and use it in GitHub Desktop.
Viagem Espacial
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <cstdio> | |
#include <cmath> | |
#include <algorithm> | |
using namespace std; | |
int n, resp; | |
double xc, yc, r, delta=0.00000000001; | |
int main(){ | |
// leio os valores de n, xc, yc e r | |
scanf("%d %lf %lf %lf", &n, &xc, &yc, &r); | |
// para cada tiro | |
for(int i=1; i<=n; i++){ | |
// leio os dos pontos que o determinam | |
double x1, y1, x2, y2; | |
scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2); | |
// se a reta é paralela ao eixo das abscissas | |
if(x1==x2){ | |
// a distância é a diferença etre as coordenadas x | |
// da reta e do centro do asteroide | |
if(abs(xc-x1)<=r) resp++; | |
continue; | |
} | |
// se a reta é paralela ao eixo das ordenadas | |
if(y1==y2){ | |
// a distância é a diferença etre as coordenadas y | |
// da reta e do centro do asteroide | |
if(abs(yc-y1)<=r) resp++; | |
continue; | |
} | |
// se não, calculo o termos da equação comum da distância | |
double a=(y2-y1)/(x2-x1), b=-a*x1+y1; | |
double p=yc-a*xc-b, q=xc-(yc-b)/a; | |
//se o ponto da reta usado como referência for o centro do asteroide | |
if(p==q && p==0){ | |
// então o tiro acertou o alvo | |
resp++; | |
continue; | |
} | |
// se não, calculo a distância normalmente | |
double d=abs(p*q)/sqrt(p*p+q*q); | |
// e se ela for menor que o raio, a reta cprta o círculo | |
if(d<=r+delta) resp++; | |
} | |
// após a leitura da entrada, imprimo o valor de resp | |
printf("%d\n", resp); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment