EDITAR:
En cuanto a su declaración actual de la pregunta, esa oración se relaciona con la diferencia que surge de la indexación basada en 0 y la indexación basada en 1.
‘A’, para nuestra comprensión de la analogía, es 0, pero de acuerdo con el esquema de etiquetado de la pregunta, debe ser 1 y, de manera similar, ‘B’ debe ser 2 y no 1.
Entonces, para abordar esto, la solución de Facebook reduce n en 1 antes del comienzo de cada ciclo.
Comencemos con un ejemplo: EHT 34
Todos los personajes que tenemos son E, H y T.
- ¿El algoritmo de Kruskal resuelve siempre el problema del vendedor ambulante?
- ¿Por qué usar un diagrama de flujo es una mala práctica en la programación?
- ¿Cuáles son algunos algoritmos de aprendizaje automático que pueden ayudarme a encontrar las similitudes o diferencias entre las ideas textuales?
- ¿Cómo se debe aprender la codificación, haciendo algoritmos, desde el nivel básico, dado que no tiene experiencia en codificación? (especialmente desde el punto de vista de la colocación y también dado el hecho de que me queda un año para que comience mi temporada de colocación).
- Cómo ordenar diagonales de una matriz 2D de manera eficiente
Hacer etiquetas en el orden descrito:
Longitud = 1:
EHT
Longitud = 2:
EE EH ET HE HH HT TE TH TT
Longitud = 3:
EEE EEH EET EHE …
Entonces entiendes que si estamos viendo la longitud [matemática] i [/ matemática], entonces el número total de tales cadenas es [matemática] a ^ i [/ matemática].
Ahora, si la longitud no cambiara, entonces se puede encontrar fácilmente [math] i [/ math] th string.
Considere AB como nuestra cadena, y longitud = 3
tenemos las siguientes combinaciones
Cadena Binario Decimal
AAA 000 0
AAB 001 1
ABA 010 2
ABB 011 3
BAA 100 4
BAB 101 5
BBA 110 6
BBB 111 7
El parecido se puede apreciar de inmediato.
Para los caracteres disponibles ABC y longitud = 3, tenemos
String Base-3 Decimal
AAA 000 0
AAB 001 1
AAC 002 2
ABA 010 3
ABB 011 4
… y así
Entonces podemos hacerlo al revés para llegar a la cadena.
Para encontrar la tercera cadena, convertimos 3 a base-3, es decir, 010 y reemplazamos los caracteres de forma analógica para obtener el resultado ABA
Ahora, todo lo que queda es encontrar la longitud de [math] i [/ math] th string de antemano.
Esto se puede hacer utilizando nuestra observación inicial.
f = abierto ("F: \\ hackerCup \\ labelmaker.txt") w = abierto ("F: \\ hackerCup \\ labelmaker_out.txt", 'w') t = int (f.readline ()) para T en xrange (1, t + 1): w.write ("Caso #" + str (T) + ":") caracteres, n = f.readline (). split () n = int (n) si n == 1: caracteres de impresión continuar av = len (caracteres) #av es el número de caracteres disponibles l = 1 #l será la longitud de la enésima cadena lim = av mientras n> lim: n- = lim l + = 1 lim * = av n- = 1 ans = '' para _ en xrange (l): ans = chars [n% av] + ans #conversión a base 'av' y reemplazo n / = av w.write (ans + '\ n') w.close () f.close ()