Dada una m
por n
barra de chocolate, m,n
positiva, la salida el número de formas de romper la barra en mn
1 por 1 piezas donde cada pausa se produce en una línea de cuadrícula.
El orden es importante. Las piezas también son distinguibles, por lo que las dos piezas en cada extremo de una barra de chocolate de 1 por 3 no son equivalentes.
Por ejemplo, para un bloque de 2 por 2 tenemos:
_ _ _ _ _ _ _ _
|_‖_| -> |‗| |_| -> |_| |‗| -> |_| |_|
|_‖_| |_| |_| _ |_| _ _
|_| |_| |_|
_ _ _ _ _ _ _ _
|_‖_| -> |_| |‗| -> |‗| |_| -> |_| |_|
|_‖_| |_| |_| |_| _ _ _
|_| |_| |_|
_ _ _ _ _ _ _ _
|‗|‗| -> |_‖_| -> |_| |_| -> |_| |_|
|_|_| _ _ _ _ _ _
|_|_| |_‖_| |_| |_|
_ _ _ _ _ _ _ _
|‗|‗| -> |_|_| -> |_‖_| -> |_| |_|
|_|_| _ _ _ _ _ _
|_‖_| |_| |_| |_| |_|
Por lo tanto, hay 4 formas de dividir una barra de chocolate de 2 por 2.
Reglas
La entrada será dos enteros a través de la entrada de función, STDIN, línea de comando o similar. Salida de un solo número, el número de formas de romper la barra de chocolate.
Dado que los números aumentan bastante rápido, no se preocupe si la salida excede los límites enteros de su idioma; su envío será válido siempre que el algoritmo funcione teóricamente para todas las entradas posibles.
Casos de prueba
El resultado no depende del orden de m,n
, por lo que los casos de prueba se enumeran de manera tal m <= n
.
1 1 -> 1
1 2 -> 1
1 3 -> 2
1 4 -> 6
1 5 -> 24
1 10 -> 362880
2 2 -> 4
2 3 -> 56
2 4 -> 1712
2 5 -> 92800
2 10 -> 11106033743298560
3 3 -> 9408
3 4 -> 4948992
3 5 -> 6085088256
3 10 -> 76209753666310470268511846400
4 4 -> 63352393728
A261964 son los números de chocolate dispuestos en un triángulo de tal manera que cada fila corresponde a la suma m+n
.
options(expressions=...)
y argumento--max-ppsize=
) daría como resultado un código más largo que este.