Explicación de la solución para el problema "Facilitándole la vida al caracol" presentado en el concurso de la primera sesión del Coding Rush 15, en la plataforma omegaUp.com.
Un caracol trepa cada día X centímetros a lo largo de una pared que mide L centímetros. Al caer la noche, el caracol se queda dormido y se resbala Y centímetros. Deberás crear un programa que te diga cuántos días va a tardar el caracol en trepar la pared.
- L: la longitud de la pared
- X: el número de centímetros que sube el caracol cada día
- Y: el número de centímetros que resbala el caracol durante la noche
El número de días que el caracol tarda en trepar hasta el borde superior de la pared.
NOTA: en caso de que el caracol no pueda alcanzar el borde deberás imprimir -1.
Entrada | Salida |
---|---|
600 25 75 |
-1 |
100 50 10 |
3 |
El problema en primera parte parece sencillo, pero se debe de tener en cuenta los casos límites que se pueden presentar en el problema:
- Cuando el caracol cae más de lo que puede subir (X<=Y), el caracol nunca alcanzará la parte superior de la pared
- Cuando el caracol puede subir toda la pared de un solo jalón, (X>=L) esto quiere decir que el primer día subirá toda la pared, sin que llegue la noche y por lo tanto sin caer
Cuando ninguno de esos dos casos se presenta, podemos asegurar que el caracol se tardará mas de un día en subir la pared, ahora solamente falta darnos cuenta que que último día, cuando el caracol alcanza la parte superior de la pared, ya no caerá durante la noche, entonces el último día no se debe de considerar la caída Y centimetros.
Después de darnos cuenta de todas estas consideraciones, podemos simular la subida con un while, cada día el caracol subirá y caerá hasta alcanzar la cima de la pared.
# -*- coding: UTF-8 -*-
#Facilitándole la vida al caracol
#Lectura de los datos
L = int(raw_input()) #Alto pared
X = int(raw_input()) #Centimetros que sube un día
Y = int(raw_input()) #Centimetros que cae durante la noche
#Si el caracol cae más por día de lo que puede subir
if X <= Y:
#Si el caracol sube menos en un día de lo que mide la pared
if X < L:
print "-1"
#Si X > L el caracol puede subir toda la pared de un jalón, en un solo día
else:
print "1"
#El caracol puede subir más de lo que cae en la noche, entonces va a poder subir la pared
else:
#La cantidad de centimetros que el caracol puede subir en un día y una noche
subidaDiaria = X -Y
#Esta es la parte más importante, cuando el caracol llegue a la cima de la pared ya no va a caer, porque
#ya esta hasta arriba, por eso le ponemos que la altura inicial va a ser X
alturaRecorrida = X
#El caracol empieza a subir en el día 1, por lo mismo de la instrucción anterior
dias = 1
#Mientras el caracol no haya completado subir la pared, que siga subiendo
while alturaRecorrida < L:
alturaRecorrida = alturaRecorrida + subidaDiaria
dias = dias + 1
#Ya subió toda la pared, por lo que mostramos los días
print dias
- Diseño del problema: Javier Rivera
- Alta del problema en la plataforma: Alexander Obeid
- Explicación del problema: Alfonso Venancio