Compte tenu d' une m
par n
barre de chocolat, m,n
sortie positive, le nombre de moyens de briser la barre dans mn
une par une des pièces , où chaque rupture se produit sur une ligne de grille.
L'ordre est important. Les morceaux se distinguent également, de sorte que les deux morceaux à chaque extrémité d'une barre de chocolat 1 par 3 ne sont pas équivalents.
Par exemple, pour un bloc 2 par 2, nous avons:
_ _ _ _ _ _ _ _
|_‖_| -> |‗| |_| -> |_| |‗| -> |_| |_|
|_‖_| |_| |_| _ |_| _ _
|_| |_| |_|
_ _ _ _ _ _ _ _
|_‖_| -> |_| |‗| -> |‗| |_| -> |_| |_|
|_‖_| |_| |_| |_| _ _ _
|_| |_| |_|
_ _ _ _ _ _ _ _
|‗|‗| -> |_‖_| -> |_| |_| -> |_| |_|
|_|_| _ _ _ _ _ _
|_|_| |_‖_| |_| |_|
_ _ _ _ _ _ _ _
|‗|‗| -> |_|_| -> |_‖_| -> |_| |_|
|_|_| _ _ _ _ _ _
|_‖_| |_| |_| |_| |_|
Il existe donc 4 façons de briser une barre de chocolat 2 par 2.
Règles
L'entrée sera deux entiers via l'entrée de fonction, STDIN, la ligne de commande ou similaire. Sortie d'un seul numéro, le nombre de façons de briser la barre de chocolat.
Étant donné que les nombres augmentent assez rapidement, ne vous inquiétez pas si la sortie dépasse les limites entières de votre langue - votre soumission sera valide tant que l'algorithme fonctionnera théoriquement pour toutes les entrées possibles.
Cas de test
La sortie ne dépend pas de l'ordre de m,n
, donc les cas de test sont répertoriés de cette façon 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 est les nombres de chocolat disposés dans un triangle de telle sorte que chaque rangée correspond à la somme m+n
.
options(expressions=...)
et en argument--max-ppsize=
) entraînerait un code plus long que celui-ci.