与えられたm
ことにより、n
チョコレートバー、m,n
正、出力にバーを破るには、いくつかの方法mn
、各ブレークがグリッド線に発生した1枚で1。
順序が重要です。ピースも区別できるため、1 x 3のチョコレートバーの両端の2つのピースは同等ではありません。
たとえば、2 x 2ブロックの場合:
_ _ _ _ _ _ _ _
|_‖_| -> |‗| |_| -> |_| |‗| -> |_| |_|
|_‖_| |_| |_| _ |_| _ _
|_| |_| |_|
_ _ _ _ _ _ _ _
|_‖_| -> |_| |‗| -> |‗| |_| -> |_| |_|
|_‖_| |_| |_| |_| _ _ _
|_| |_| |_|
_ _ _ _ _ _ _ _
|‗|‗| -> |_‖_| -> |_| |_| -> |_| |_|
|_|_| _ _ _ _ _ _
|_|_| |_‖_| |_| |_|
_ _ _ _ _ _ _ _
|‗|‗| -> |_|_| -> |_‖_| -> |_| |_|
|_|_| _ _ _ _ _ _
|_‖_| |_| |_| |_| |_|
したがって、2 x 2のチョコレートバーを分割する方法は4つあります。
ルール
入力は、関数入力、STDIN、コマンドラインなどを介した2つの整数になります。チョコレートバーを分割する方法の数である単一の数値を出力します。
数値は非常に急速に増加するため、出力が言語の整数制限を超えても心配する必要はありません。アルゴリズムがすべての入力に対して理論的に機能する限り、提出は有効です。
テストケース
出力はの順序に依存しないm,n
ので、テストケースは次のようにリストされ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は、各行が合計に対応するように三角形に配置されたチョコレート番号m+n
です。
options(expressions=...)
and引数を使用--max-ppsize=
)は、これよりも長いコードになります。