Hay n cajas, numeradas del 1 al n . Cada casilla está bloqueada, de modo que solo se puede abrir con un tipo de clave correspondiente (también numerada de 1 a n ). Estas claves se distribuyen aleatoriamente en los cuadros (un cuadro puede tener cualquier número de claves, una clave puede tener cualquier número de duplicados), y luego todos los cuadros se cierran. También se ha encerrado un tesoro (numerado 0 ) en muchas de las cajas.
Has contratado a un cerrajero para recuperar todo el tesoro. Cobra por cada caja que abre. No hay ningún cargo por abrir una caja para la cual la llave ya está disponible.
La entrada es el contenido de cada cuadro. Puede decidir el formato de la entrada.
Produzca el costo mínimo requerido para obtener los tesoros.
Notas
- Su algoritmo puede llevar mucho tiempo, pero eso es irrelevante.
- El código más corto gana.
- No es necesario preocuparse por la entrada no válida.
Data de muestra
Aquí la línea i representa las claves presentes en el cuadro i .
Entrada
2 0
3
4 0
5 6 0
6
0
Salida
1
Entrada
2 0
3 0
4 0
6
5 0
Salida
3
Entrada
2 4 0
3 0
1 0
6
5 0
Salida
2
Entrada
1
3 4
2 6
5
Salida
0
fuente
[[1] [3 4] [] [] [2 6] [5]]
o tal vez{{1},{3,4},{},{},{2,6},{5}}
. De esta manera, la mayoría de los idiomas pueden reducir la lectura de la entrada a algo tan trivial comoi=eval(read())
centrarse en la parte divertida del desafío.Respuestas:
CJam,
59525049454342 bytes¡Gracias a @ MartinBüttner por jugar 3 bytes y allanar el camino para 4 más!
Pruébelo en línea en el intérprete de CJam .
Cómo funciona
fuente
array long &
obras, para que pueda quitar laa
de0a&
. Lamentablemente, esto hace que sea un poco más difícil atraparte.0a&
con0&
, también tengo que reemplazar0+
con0aa+
, ya que0 0&
es falso.CJam (53 bytes)
Esto es demasiado lento para el intérprete en línea.
Disección
fuente
java.lang.OutOfMemoryError: Java heap space
con su programa.[ [4,0], [1,3,4], [0], [6,0], [3,0], [5]]
por supuesto, con el estilo de entrada como se muestra en la publicación original.Haskell, 173 bytes
l
es a quien quieres llamar.No estoy seguro de si no debería usar un pseudo-
Map
en[(Int,[Int])]
su lugar (en lugar de[[Int]]
).fuente