Bir verilen m
göre n
çikolata, m,n
içine çubuğu kırmak için yollar pozitif çıkış sayısı mn
, her ara bir ızgara çizgisinin oluşur 1 1 ile parçalar.
Düzen önemlidir. Parçalar da ayırt edilebilir, bu nedenle 1 ila 3 çikolata çubuğunun her iki ucundaki iki parça eşdeğer değildir.
Örneğin, 2 2 blok için:
_ _ _ _ _ _ _ _
|_‖_| -> |‗| |_| -> |_| |‗| -> |_| |_|
|_‖_| |_| |_| _ |_| _ _
|_| |_| |_|
_ _ _ _ _ _ _ _
|_‖_| -> |_| |‗| -> |‗| |_| -> |_| |_|
|_‖_| |_| |_| |_| _ _ _
|_| |_| |_|
_ _ _ _ _ _ _ _
|‗|‗| -> |_‖_| -> |_| |_| -> |_| |_|
|_|_| _ _ _ _ _ _
|_|_| |_‖_| |_| |_|
_ _ _ _ _ _ _ _
|‗|‗| -> |_|_| -> |_‖_| -> |_| |_|
|_|_| _ _ _ _ _ _
|_‖_| |_| |_| |_| |_|
Bu nedenle, 2'ye 2 çikolata bar kırmanın 4 yolu vardır.
kurallar
Giriş, işlev girişi, STDIN, komut satırı veya benzeri aracılığıyla iki tamsayı olacaktır. Çıktı tek bir sayı, çikolata kırmak için yolu sayısı.
Sayılar oldukça hızlı bir şekilde arttığından, çıktı dilinizin tam sayı sınırlarını aşarsa endişelenmeyin - algoritmanız teorik olarak tüm olası girişler için çalıştığı sürece gönderiminiz geçerli olacaktır.
Test senaryoları
Çıktı sırasına bağlı değildir m,n
, bu nedenle test senaryoları öyle listelenir 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 , her satırın toplamına karşılık gelecek şekilde üçgen şeklinde düzenlenmiş çikolata sayılarıdır m+n
.
options(expressions=...)
ve argümanını kullanarak--max-ppsize=
) bundan daha uzun bir kodla sonuçlanır.