好的,我将这道题整理为清晰的题面格式,并补充样例解释、数据范围与时空限制:
题目描述
原题来自:BZOJ 3907
某城市的街道呈网格状,左下角坐标为 A(0,0),右上角坐标为 B(n,m),其中 n≥m。
现在从 A(0,0) 点出发,只能沿着街道向正右方或者正上方行走,且不能经过图示中直线 y=x 左上方的点,即任何途径的点 (x,y) 都要满足 x≥y,请问在这些前提下,到达 B(n,m) 有多少种走法。
图例说明:
图中从 (0,0) 到 (n,m) 的路径,每一步只能向右或向上,并且不允许穿过直线 y=x 上方(即不允许 y>x)。
输入格式
仅有一行,包含两个整数 n 和 m,表示城市街区的规模。
输出格式
仅有一个整数和一个换行符(回车符),表示不同的方案总数。
样例
样例输入
6 6
样例输出
132
样例解释
从 (0,0) 到 (6,6),只能向右或向上,且路径始终满足 x≥y(不穿过 y=x 上方)。
此题等价于“卡特兰数”相关问题的推广:
当 n=m 时,方案数为卡特兰数 Cn=n+11(n2n)。
本例 n=m=6,卡特兰数 $C_6 = \frac{1}{7}\binom{12}{6} = \frac{1}{7} \times 924 = 132$。
当 n≥m 时,方案数为 (mn+m)−(m−1n+m)(即从总路径数中减去穿过 y=x 的路径数)。
本例 n=6,m=6:
- 总路径数 (612)=924;
- 非法路径数 (512)=792;
- 合法路径数 924−792=132。
数据范围
对于全部数据,1≤m≤n≤5000。
注意:答案可能非常大,需要高精度计算(使用大整数)。
时空限制
- 时间:1000 ms
- 内存:524288 KB
提示
该问题是经典的“卡特兰数”或“Dyck 路”推广。
公式为:
$$\text{合法方案数} = \binom{n+m}{m} - \binom{n+m}{m-1} = \binom{n+m}{n} - \binom{n+m}{n+1}$$
其中当 m>n 时答案为 0,但题目保证 n≥m。
由于 n,m 最大 5000,组合数 (mn+m) 可达 (500010000) 量级,位数约 3000 位,必须用高精度计算。
计算组合数时可采用高精度乘法与除法,或预处理质因数分解后用高精度乘法累加。