Problema 3
Hackers y Crackers
hackers.pas, hackers.c, hackers.cpp

Problema
Se tiene el siguiente código:

Function check(checksum: integer; s: string): boolean;
var i, n, sum, index:integer;
begin
     sum:= 1;
     n:= length(s);
     for i:= 1 to n do
         begin
         index:= ord(s[i]) -64;
         sum:= sum + (index*n*i) + (index*i*i);
         end;
     if sum= checksum then
        check:= true
     else
        check:= false;
end;

El código sirve para revisar si una contraseña es correcta a no. Se sabe que la contraseña está en mayúsculas y que no tiene más de cuatro letras. Dado el valor de checksum, encontrar todas las posibles contraseñas que cumplen.

Entrada
Un entero positivo n, 0 < n ≤ 531,441.

Salida
En el primer renglón la cantidad de posibles contraseñas que cumplen. El los siguientes renglones todas la contraseñas que cumplen ordenadas primero por tamaño y luego por orden lexicográfico.

Ejemplo

entrada salida
27 2
M
FA
1 0

 


Concurso: 11a OMI, Aguascalientes - Examen de Selección. 23/Abril/2006
Propuesto por: Pier Paolo Guillén Hernández
Ayuda: entradas, salidas, sugerencias
Soluciones: hackers.pas, hackers.c, hackers.cpp


World of πer