#zHSXybttg060613. 1660:网格

1660:网格

好的,我将这道题整理为清晰的题面格式,并补充样例解释、数据范围与时空限制:


题目描述

原题来自:BZOJ 3907

某城市的街道呈网格状,左下角坐标为 A(0,0)A(0,0),右上角坐标为 B(n,m)B(n,m),其中 nmn \ge m
现在从 A(0,0)A(0,0) 点出发,只能沿着街道向正右方或者正上方行走,且不能经过图示中直线 y=xy=x 左上方的点,即任何途径的点 (x,y)(x,y) 都要满足 xyx \ge y,请问在这些前提下,到达 B(n,m)B(n,m) 有多少种走法。

图例说明
图中从 (0,0)(0,0)(n,m)(n,m) 的路径,每一步只能向右或向上,并且不允许穿过直线 y=xy=x 上方(即不允许 y>xy > x)。


输入格式

仅有一行,包含两个整数 nnmm,表示城市街区的规模。


输出格式

仅有一个整数和一个换行符(回车符),表示不同的方案总数。


样例

样例输入

6 6

样例输出

132

样例解释

(0,0)(0,0)(6,6)(6,6),只能向右或向上,且路径始终满足 xyx \ge y(不穿过 y=xy=x 上方)。

此题等价于“卡特兰数”相关问题的推广:
n=mn=m 时,方案数为卡特兰数 Cn=1n+1(2nn)C_n = \frac{1}{n+1}\binom{2n}{n}
本例 n=m=6n=m=6,卡特兰数 $C_6 = \frac{1}{7}\binom{12}{6} = \frac{1}{7} \times 924 = 132$。

nmn \ge m 时,方案数为 (n+mm)(n+mm1)\binom{n+m}{m} - \binom{n+m}{m-1}(即从总路径数中减去穿过 y=xy=x 的路径数)。
本例 n=6,m=6n=6,m=6

  • 总路径数 (126)=924\binom{12}{6} = 924
  • 非法路径数 (125)=792\binom{12}{5} = 792
  • 合法路径数 924792=132924 - 792 = 132

数据范围

对于全部数据,1mn50001 \le m \le n \le 5000

注意:答案可能非常大,需要高精度计算(使用大整数)。


时空限制

  • 时间:1000 ms1000 \text{ ms}
  • 内存:524288 KB524288 \text{ KB}

提示
该问题是经典的“卡特兰数”或“Dyck 路”推广。
公式为:

$$\text{合法方案数} = \binom{n+m}{m} - \binom{n+m}{m-1} = \binom{n+m}{n} - \binom{n+m}{n+1}$$

其中当 m>nm > n 时答案为 00,但题目保证 nmn \ge m

由于 n,mn,m 最大 50005000,组合数 (n+mm)\binom{n+m}{m} 可达 (100005000)\binom{10000}{5000} 量级,位数约 30003000 位,必须用高精度计算。
计算组合数时可采用高精度乘法与除法,或预处理质因数分解后用高精度乘法累加。