Primero, probablemente sea más fácil responder la pregunta de cuántos números pesados son <= N. Obviamente, dos consultas de este formulario pueden responder a su consulta.
Este problema es mucho más fácil cuando N es una potencia de 10. En este caso, el problema se asigna a Rompecabezas de programación: se le dan n dados cada uno con caras numeradas del 1 al m. Lanzas los n dados y anotas la suma de los números en los n dados. Te dan un número x. Considérelo una ganancia si la suma obtenida es mayor que x. Encuentre la probabilidad de ganar dado n, m y x.
En términos más generales, el problema de cuántos números pesados coinciden con un prefijo de dígitos dado puede verse como el mismo problema. Entonces, todo lo que queda es dividir nuestra consulta de N enteros en un pequeño número de consultas con este formulario. Este es un truco común en la programación competitiva. Consideramos todos los prefijos donde solo el último dígito del prefijo no coincide con N y es más pequeño (excepto el último dígito). Se deduce que cualquier número con dicho prefijo será menor que N. Además, los ceros son especiales en este problema y requieren un poco de cuidado.
- ¿Qué preguntas le hicieron en la entrevista de programación para Google, Amazon, Facebook o Microsoft?
- ¿Qué preguntas se hacen en una entrevista para el pasante de ingeniería de software?
- ¿Cuáles son las preguntas que uno podría esperar al entrevistar para un rol de "Evangelista de plataforma de desarrollador" en Microsoft?
- ¿Qué opinas de CodePair by HackerRank?
- ¿Cuál es la mejor estrategia para resolver los problemas de LeetCode?
Como ejemplo, podemos asignar N = 8698 a los siguientes patrones. Los primeros tres patrones cuentan números pesados con menos de 4 dígitos. Los patrones restantes cuentan números pesados que coinciden con algún número de dígitos iniciales de N.
?
[1-9]?
[1-9] ??
[1-7] ???
8 [0-5] ??
86 [0-8]?
869 [0-8]
Usando el enfoque de programación dinámica en la pregunta vinculada, todo este problema se puede resolver en [math] O (log ^ 2 (B)) [/ math] time.