Space Geometry


Enviar solución

Puntos: 100
Límite de tiempo: 1.0s
Límite de memoria: 256M

Tipo de problema
Lenguajes permitidos
C, C++, Java, Python

Estás programando el motor gráfico para un juego de naves retro estilo \(\textit{Shoot 'em up}\) diseñado para consolas de 32 bits.

En este juego, cuando los enemigos son destruidos, dejan una estela de daño expansivo con forma perfectamente circular. Un problema conocido en el desarrollo de videojuegos 2D es calcular exactamente el área de la pantalla que está cubierta por estas explosiones, especialmente cuando dos explosiones ocurren muy cerca y sus áreas se superponen.

Para optimizar el \(\textit{hitbox}\) del jugador, el motor del juego te envía las coordenadas en pantalla de dos explosiones simultáneas y sus respectivos radios de daño. Tu objetivo es escribir el algoritmo que calcule el área total cubierta por la unión de ambas explosiones.

Entrada

La primera línea contiene tres enteros \(X_A\), \(Y_A\) y \(R_A\) (\(-100 \leq X_A, Y_A \leq 100\), \(1 \leq R_A \leq 100\)), representando la coordenada y el radio de la primera explosión.

La segunda línea contiene tres enteros \(X_B\), \(Y_B\) y \(R_B\) (\(-100 \leq X_B, Y_B \leq 100\), \(1 \leq R_B \leq 100\)), representando la coordenada y el radio de la segunda explosión.

Salida

Imprimir el área exacta que abarcan ambas explosiones combinadas. El motor gráfico aceptará tu respuesta como válida si el error absoluto o relativo es como máximo \(10^{-6}\).

\(\textbf{Ayuda para el formato de salida:}\) Para imprimir un número de punto flotante r con precisión podés usar:

En Python: \(print(f"{r:.10f}")\)

En C++: \(std::cout << std::fixed << std::setprecision(10) << r << "\n";\)

Ejemplo

Entrada 1

1 1 1
2 2 1

Salida 1

5.7123889804

Entrada 2

1 1 1
3 3 1

Salida 2

6.2831853072

Comentarios

No hay comentarios por el momento.