51nod 1120 机器人走方格 V3

N * N的方格,从左上到右下画一条线。一个机器人从左上走到右下,只能向右或向下走。并要求只能在这条线的上面或下面走,不能穿越这条线,有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10007的结果。
 
Input
输入一个数N(2 <= N <= 10^9)。
Output
输出走法的数量 Mod 10007。
Input示例
4
Output示例
10
 
记得这类题曾经看到过,而且当时是这样的:
你一开始在(0,0),然后你每个时间可以向右上走一步或者向右下走一步。
假如你现在在(x,y),你可以走到(x+1,y+1)或者(x+1,y-1),那么走2n步走到(2n,0)并且不能走到x轴下方的方案数是多少。
首先我们知道如果没有越过x轴的限制,方案数就是C(2n,n)(一共要走2n步,在其中选n步往上走)
但是我们需要减掉越过了x轴的情况。记得当时给我们看了一个这个图:

大概意思就是,如果一条路径y坐标到达了-1,那么它就是在x轴下方了
我们把它第一次y坐标到达-1之后的路径以y=-1这条直线为对称轴翻转,那么这条路径的终点就是(2n,-2)
我们观察这被翻转的路径,发现它其实属于一种往右下走次数-往右上走=1的一种路径,这种路径的方案数为C(2n,n1)
所以说,那么走2n步走到(2n,0)并且不能走到x轴下方的方案数是C(2n,n)C(2n,n1)
我们发现这就是卡特兰数的公式。
 
而机器人走方格这道题也是一样的,只不过他相当于把坐标轴旋转了45度而已。
所以可以直接套组合公式,需要用Lucas定理求。
posted @   shixinyi  阅读(211)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示