Dado um m
por n
barra de chocolate, m,n
positivo, produza o número de maneiras de quebrar a barra em mn
pedaços 1 por 1, onde cada quebra ocorre em uma linha de grade.
A ordem é importante. As peças também são distinguíveis; portanto, as duas peças em uma das extremidades de uma barra de chocolate 1 por 3 não são equivalentes.
Por exemplo, para um bloco 2 por 2, temos:
_ _ _ _ _ _ _ _
|_‖_| -> |‗| |_| -> |_| |‗| -> |_| |_|
|_‖_| |_| |_| _ |_| _ _
|_| |_| |_|
_ _ _ _ _ _ _ _
|_‖_| -> |_| |‗| -> |‗| |_| -> |_| |_|
|_‖_| |_| |_| |_| _ _ _
|_| |_| |_|
_ _ _ _ _ _ _ _
|‗|‗| -> |_‖_| -> |_| |_| -> |_| |_|
|_|_| _ _ _ _ _ _
|_|_| |_‖_| |_| |_|
_ _ _ _ _ _ _ _
|‗|‗| -> |_|_| -> |_‖_| -> |_| |_|
|_|_| _ _ _ _ _ _
|_‖_| |_| |_| |_| |_|
Portanto, existem 4 maneiras de dividir uma barra de chocolate 2 por 2.
Regras
A entrada será dois números inteiros via entrada de função, STDIN, linha de comando ou similar. Saída um único número, o número de maneiras de quebrar a barra de chocolate.
Como os números aumentam rapidamente, não se preocupe se a saída exceder os limites inteiros do seu idioma - seu envio será válido enquanto o algoritmo funcionar teoricamente para todas as entradas possíveis.
Casos de teste
A saída não depende da ordem de m,n
, portanto, os casos de teste são listados de tal forma 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 são os números de chocolate dispostos em um triângulo, de modo que cada linha corresponda à soma m+n
.
options(expressions=...)
e argumento--max-ppsize=
) resultaria em um código mais longo que este.