Đưa ra một m
bằng n
thanh chocolate, m,n
tích cực, đầu ra số cách để phá vỡ thanh vào mn
1 của 1 mảnh trong đó mỗi ngắt xảy ra trên một Gridline.
Trật tự là quan trọng. Các mảnh cũng có thể phân biệt được, vì vậy hai mảnh ở hai đầu của thanh sô cô la 1 trên 3 không tương đương.
Chẳng hạn, đối với khối 2 x 2, chúng ta có:
_ _ _ _ _ _ _ _
|_‖_| -> |‗| |_| -> |_| |‗| -> |_| |_|
|_‖_| |_| |_| _ |_| _ _
|_| |_| |_|
_ _ _ _ _ _ _ _
|_‖_| -> |_| |‗| -> |‗| |_| -> |_| |_|
|_‖_| |_| |_| |_| _ _ _
|_| |_| |_|
_ _ _ _ _ _ _ _
|‗|‗| -> |_‖_| -> |_| |_| -> |_| |_|
|_|_| _ _ _ _ _ _
|_|_| |_‖_| |_| |_|
_ _ _ _ _ _ _ _
|‗|‗| -> |_|_| -> |_‖_| -> |_| |_|
|_|_| _ _ _ _ _ _
|_‖_| |_| |_| |_| |_|
Do đó, có 4 cách để phá vỡ một thanh sô cô la 2 trên 2.
Quy tắc
Đầu vào sẽ là hai số nguyên thông qua chức năng nhập, STDIN, dòng lệnh hoặc tương tự. Xuất ra một số duy nhất, số cách để phá vỡ thanh sô cô la.
Vì các con số tăng lên khá nhanh, đừng lo lắng nếu đầu ra vượt quá giới hạn số nguyên của ngôn ngữ của bạn - việc gửi của bạn sẽ hợp lệ miễn là về mặt lý thuyết thuật toán hoạt động cho tất cả các đầu vào có thể.
Các trường hợp thử nghiệm
Đầu ra không phụ thuộc vào thứ tự m,n
, vì vậy các trường hợp thử nghiệm được liệt kê sao cho 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 là số sô cô la được sắp xếp theo hình tam giác sao cho mỗi hàng tương ứng với tổng m+n
.
options(expressions=...)
và đối số tương ứng--max-ppsize=
) sẽ dẫn đến mã dài hơn mã này.