ABC 154 F Many Many Paths 図解解説

まず,f(r, c) を表形式で図示します.数字が大きすぎて省略されてしまっている部分がありますが,無視してください.

f:id:Pro_ktmr:20200220202615p:plain
f(r, c) を表形式で表したもの

ところで,この値は パスカルの三角形 (のちょっと内側) と一致しています.ゆえに,f(r, c) = f(r-1, c) + f(r, c-1) と表せます.・・・①

さて,今したいのは,この表中の任意の長方形について,その和を求めることです.長方形の和は次のように,左上を直角とする 3 つの直角二等辺三角形の足し引きで表すことが出来ます.

f:id:Pro_ktmr:20200220202844p:plain
長方形を三角形の足し引きで表したもの

よって,表中の任意の三角形について,その和が求められれば良いことがわかりました.

ここで,ある三角形についてその周りの値を適当に文字で置き,三角形内の各値を求めると①より次のようになります.なお,周りの値は f(r, c) = (r+c)!/(r!c!) であることを用いて求めます.

f:id:Pro_ktmr:20200220203817p:plain
三角形の周りの値と三角形内の値の関係

更に,a だけに着目すると,こうなります.

f:id:Pro_ktmr:20200220204015p:plain
a だけに着目したもの

すると,a の係数がまたもパスカルの三角形になっています.(まあそれはそうです.)

もちろん,他の文字,例えば b に注目しても係数がパスカルの三角形になっています.

f:id:Pro_ktmr:20200220204623p:plain
b だけに着目したもの

ところで,パスカルの三角形の i 段目の和は 2i-1 になります.(二項定理を使って証明できます.) よって,1 ~ i 段目の和は 2i -1 です.

したがって,今着目している三角形の場合,その和は a×(24-1) + b×(23-1) + c×(22-1) + d×(21-1) + x×(24-1) + y×(23-1) + z×(22-1) + s×(21-1) となります.

まとめ

  1. 長方形領域を 3 つの三角形の足し引きに分ける.
  2. ある三角形に着目して,その周りを f(r, c) = (r+c)!/(r!c!) により求める.(階乗と 逆元 を前計算しておく.)
  3. 周りの 1 マスずつについて,パスカルの三角形の段の和をかけつつ ans に加算していく.
  4. 以上で各三角形内の和が求められ,したがってもとの長方形内の和も求められる.