とりあえずDPっぽいものから考えた。カードから順にカードまで二人に配っていくとして、千咲さんに枚、月乃瀬さんに枚配った時点で、条件に合っているような配り方の総数をとする。遷移としては
かつまたはかつなら
かつまたはかつなら
で求まるが、なので制約的に無理だし、実はメモ化再帰で枝刈りされるみたいなこともないし、うまい高速化も思いつかないし……となって困っていた。
こういう問題の言い換えとして、原点からスタートして千咲さんがカードを取ったらベクトルに沿って進み、月乃瀬さんが取ったらベクトルに沿って進むというのがあったなと思い出して実験してみると、次のような性質が見える:
- からスタートしてに着く
- 座標が正の時は月乃瀬さんが勝っていて、座標が負の時は千咲さんが勝っている。つまり、文字列で勝ち負けが切り替わるところで軸と交わる。
すなわち、中でが連続している部分では軸の上にいなければならず(軸を踏んでも良い)、が連続している部分では下にいなければならない。このパスの数え上げは有名なのがあった気がすると思ってググったらカタラン数だった。同じ要素が連続している各部分列についてカタラン数を求めてかけ合わせれば答えになっている。