Biorąc pod uwagę m
przez n
czekolady, m,n
pozytywny, wyjście na wiele sposobów przełamania pasek do mn
1 za 1 szt, w których występuje każda przerwa na linii siatki.
Porządek jest ważny. Kawałki są również rozróżnialne, więc dwa kawałki na obu końcach tabliczki czekolady 1 na 3 nie są równoważne.
Na przykład dla bloku 2 na 2 mamy:
_ _ _ _ _ _ _ _
|_‖_| -> |‗| |_| -> |_| |‗| -> |_| |_|
|_‖_| |_| |_| _ |_| _ _
|_| |_| |_|
_ _ _ _ _ _ _ _
|_‖_| -> |_| |‗| -> |‗| |_| -> |_| |_|
|_‖_| |_| |_| |_| _ _ _
|_| |_| |_|
_ _ _ _ _ _ _ _
|‗|‗| -> |_‖_| -> |_| |_| -> |_| |_|
|_|_| _ _ _ _ _ _
|_|_| |_‖_| |_| |_|
_ _ _ _ _ _ _ _
|‗|‗| -> |_|_| -> |_‖_| -> |_| |_|
|_|_| _ _ _ _ _ _
|_‖_| |_| |_| |_| |_|
Dlatego istnieją 4 sposoby na rozbicie tabliczki czekolady 2 na 2.
Zasady
Wejściami będą dwie liczby całkowite poprzez funkcję input, STDIN, wiersz poleceń lub podobny. Podaj jedną liczbę, liczbę sposobów na rozbicie tabliczki czekolady.
Ponieważ liczby rosną dość szybko, nie martw się, jeśli wynik przekroczy limity liczb całkowitych twojego języka - przesłanie będzie ważne, dopóki algorytm teoretycznie działa dla wszystkich możliwych danych wejściowych.
Przypadki testowe
Dane wyjściowe nie zależą od kolejności m,n
, więc przypadki testowe są wymienione tak, że 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 to liczby czekoladowe ułożone w trójkąt, tak aby każdy rząd odpowiadał sumie m+n
.
options(expressions=...)
i argumentu--max-ppsize=
) spowoduje, że kod będzie dłuższy niż ten.