Thursday, September 15, 2016

Solucion al Problema: 1043 - Triangle Partitioning [http://lightoj.com/] con java

Para ver el link del problema Click aqui
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));
 }
}

No comments: