Buenasss. Resolví este problema, pero me quedaron unas dudas cuando leí las hints propuestas por el CP4.
Procedo a contar mi idea de forma resumida y luego planteo mis dudas.
Idea AC
Adjunto una imagen para que se entienda mejor:
Las rectas verde y azul están a una distancia de sus respectivos ejes igual los anchos de los pasillos del testcase.
Si se quiere rotar el piano 90° hay que pasar obligatoriamente por todos los ángulos \alpha (0°\leq\alpha\leq90°).
Sean r y l las longitudes de los lados del piano (r<l) se puede trazar una circunferencia con centro en el origen con radio r. Sea cual sea la rotación del piano, si lo hacemos que uno de los lados toque el origen, el lado opuesto va a ser tangente a la circunferencia. Si trazamos una recta que pase sobre el lado y calculamos las intersecciones D y E con las rectas verde y azul respectivamente, la distancia entre estos dos puntos debe ser mayor o igual a l.
Súper simplificando lo de arriba voy a decir que f(\alpha) = \text{distancia(D,E)}. El piano va a poder pasar si f(\alpha) \geq l (0°\leq\alpha\leq90°).
f(\alpha) es unimodal por lo que se puede usar búsqueda ternaria para encontrar el punto mínimo.
Y acá vienen mis dudas.
¿Por qué f(\alpha) es unimodal?
Haciendo algunas observaciones y teniendo fe concluí que así era, pero no encuentro la forma de asegurarme que así lo sea.
Hints del CP4
Hints del CP4
for each two consecutive corridors; try rotating the piano by a small angle alpha in [0.1…89.9] degrees; use trigonometry to determine if the piano rotated by angle alpha can pass
¿Cómo elegir correctamente en cuánto variar \alpha?
Como no menciona búsqueda ternaria me imagino que se puede iterar por posibles valores de \alpha, pero ¿cómo saber en cuánto variar \alpha para evitar falsos positivos? Y la pregunta va más en general, en cualquier situación ¿cómo se podría estimar esa variación?
¿Cómo que trigonometría?
Estuve pensando en cómo usar trigonometría para resolver este problema. Justo escribiendo esto se me ocurrió algo, lo escribo para ponerlo en discusión. En vez de pegar el piano al origen se puede pegar el piano a las rectas verde y azul. Entonces teniendo el valor de \alpha y el lado l se pueden calcular las longitudes de los catetos del triángulo rectángulo que se forma. Con eso se puede obtener la ubicación de la hipotenusa y habría que checkear si la distancia al origen es al menos r.
Gracias por leer y si pueden darme una mano para entender las dudas planteadas les agradezco el doble
¡Gracias de antemano !