El problema que aparece a continuación apareció en la última ronda de Google Code Jam:
María ha sido contratada por la empresa Ghastly Chemicals Junkies (GCJ) para que les ayude a fabricar bullseyes. Una diana consiste en una serie de anillos concéntricos (anillos centrados en el mismo punto), y suele representar una diana de tiro con arco. GCJ está interesada en fabricar dianas blancas y negras.
María comienza con t mililitros de pintura negra, que utilizará para dibujar anillos de 1cm de grosor (un centímetro). Un anillo de 1cm de grosor es el espacio entre dos círculos concéntricos cuyos radios difieren en 1cm.
María dibuja el primer anillo negro alrededor de un círculo blanco de radio r cm. Luego repite el siguiente proceso mientras tenga suficiente pintura para hacerlo:
María imagina un anillo blanco de 1 cm de grosor alrededor del último anillo negro. A continuación, dibuja un nuevo anillo negro de 1 cm de grosor alrededor del anillo blanco. Observa que cada "anillo blanco" es simplemente el espacio entre dos anillos negros. El área de un disco con radio de 1cm es de cm2. Se necesita un mililitro de pintura para cubrir el área de cm2. ¿Cuál es el número máximo de anillos negros que puede dibujar María? Ten en cuenta que:
- María sólo dibuja anillos completos. Si la pintura restante no es suficiente para dibujar un anillo negro completo, deja de pintar inmediatamente.
- Siempre habrá suficiente pintura para dibujar al menos un anillo negro.
Entrada
La primera línea de la entrada da el número de casos de prueba, T. Siguen T casos de prueba. Cada caso de prueba consta de una línea que contiene dos números enteros separados por espacios: r y t.
Salida
Para cada caso de prueba, se imprime una línea que contiene "Caso #x: y", donde x es el número de caso (empezando por el 1) e y es el número máximo de anillos negros que María puede dibujar.
**Sample Input**
5
1 9
1 10
3 40
1 1000000000000000000
10000000000000000 1000000000000000000
**Sample Output**
Case #1: 1
Case #2: 2
Case #3: 3
Case #4: 707106780
Case #5: 49
Las entradas eran muy grandes, por lo que un enfoque de fuerza bruta no lo resolvería a tiempo. Miré las mejores soluciones, y la mayoría utilizó una variación de la fórmula siguiente:
2*R*X + (2*X-1)*X <= T
donde R es el radio del primer círculo blanco, X es el número total de anillos que puede pintar y T son los mililitros de tinta que tiene disponibles. Para encontrar la respuesta, básicamente hay que hacer una búsqueda binaria buscando la mayor X que haga que la ecuación sea verdadera.
Mi pregunta : ¿De dónde viene esa fórmula? ¿Es posible explicar cómo es que esto resuelve el problema, en términos simples? Cualquier luz que pueda arrojar será apreciada.