import java.util.Scanner;
/**
* Solucion al Problema: 1043 - Triangle Partitioning [http://lightoj.com/]
*
* @author BreakDark (Jhonny Monrroy)
* @version 1.0 beta 08/10/2013
*/
// ACEPTADO!!! xD
public class Main {
public static void main(String[] args) {
Scanner Lee; // para leer los datos de entrada
byte T, caso; // para los casos de entrada
double AB, AC, BC; // para los lados del triangulo
double r; // para el radio de las areas
double Area, Area1, Area2; // para las areas
double SenoDeAlpha; // Seno de Alfa
double h, h1, h2; // la altura del triangulo inicial
double AD; // longitud superior del trapecio, y la longitud buscada
// AQUI INICIA EL PROGRAMA
Lee = new Scanner(System.in);
T = Lee.nextByte();
for (caso = 1; caso <= T; caso++) {
// leemos la informacion
AB = Lee.nextDouble();
AC = Lee.nextDouble();
BC = Lee.nextDouble();
r = Lee.nextDouble();
// obtenemos el area del traingulo
Area = areaDelTriangulo(AB, AC, BC);
h = 2 * Area / BC;
Area2 = Area / (r + 1);
Area1 = Area - Area2;
// obtenemos el seno del angulo
SenoDeAlpha = Area * 2 / (AB * BC);
h2 = formulaDeSegundoGrado(BC, -(2 * Area2 + h * BC + 2 * Area1), 2
* Area2 * h);
h1 = h - h2;
AD = h1 / SenoDeAlpha;
// mostramos el resultado
System.out.println("Case " + caso + ": " + AD);
}
}
/**
* Obtiene uno de los resultados de la ecuacion de 2do grado ax2+bx+c
*
* @author BreakDark (Jhonny Monrroy)
* @version 1.0 beta 25/08/2013
* @param a
* El coeficiente A de la ecuacion de 2do grado
* @param b
* El coeficiente B de la ecuacion de 2do grado
* @param c
* El coeficiente C de la ecuacion de 2do grado
* @return uno de los valores de x a partir de la ecuacion ax2+bx+c
*/
private static double formulaDeSegundoGrado(double a, double b, double c) {
double dis = b * b - 4 * a * c; // discriminante
if (dis >= 0)
return ((-b - Math.sqrt(dis)) / (2 * a));
else
System.out.println("El resultado es un numero imaginario :(");
return 0;
}
/**
* obtiene el area de un triangulo a partir de sus lados
*
* @author BreakDark (Jhonny Monrroy)
* @version 1.0 beta 12/08/2013
* @param a
* Longitud del lado a del triangulo
* @param b
* Longitud del lado b del triangulo
* @param c
* Longitud del lado c del triangulo
* @return El area del triangulo de lados a, b, c
*/
private static double areaDelTriangulo(double a, double b, double c) {
double s = (a + b + c) / 2; // semiperimetro
return Math.sqrt(s * (s - a) * (s - b) * (s - c));
}
}
Blog dedicado a la publicación de artículos, programas propios, traducciones de Roms de Nes, super Nes y mas, y alguno que otro artículo sobre tecnologia.
Thursday, September 15, 2016
Solucion al Problema: 1043 - Triangle Partitioning [http://lightoj.com/] con java
Para ver el link del problema Click aqui
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment