形式化描述:给定一个网格,你每次可以向右或向上走一格,求从 \((0,0)\) 走到 \((x,y)\),且有点落在一条直线 \(y=x+b\) 的方案数。
发现,如果 \(y-x\ge b\),只需要求走到 \((x,y)\) 的方案数即可,后面的限制一定是满足的。
考虑 \(y-x<b\) 的情况,我们试着将一种合法的方案在它第一次有点落在直线上之后全部按照直线翻折过去,这里翻折其实就是原本向上走变成向右走,向右走变成向上走。最后它会走到关于直线对称的点 \((y-b,x+b)\)
证明为什么是对的。其实是好证的。
你假设第一次落在直线上是在 \((a,a+b)\) 这个点。
那么 \((x,y)\) 可以表示成 \((a+p,a+b+q)\),翻折过去的点可以表示成 \((a+q,a+b+p)\),不难发现他们是关于直线 \(y=x+b\) 对称的。
然后翻折过去的路线显然是唯一对应的,所以翻折前和翻折后的路线构成双射。所以我们可以直接把 \(y-x<b\),的情况对称过去转化成 \(y-x\ge b\) 的情况。
\(\sum_{i=0}^{\frac{b+n}{2}} \binom{n}{i-b}+\sum_{i=\frac{b+n}{2}+1}^n \binom{n}{i}\)