P4028[HZOI 2015]疯狂的机器人
问题描述
现在在二维平面内原点上有一只机器人
他每次操作可以选择向右走,向左走,向下走,向上走和不走(每次如果走只能走一格)
但是由于本蒟蒻施展的大魔法,机器人不能走到横坐标是负数或者纵坐标是负数的点上
否则他就会big bang
给定操作次数n,求有多少种不同的操作序列使得机器人在操作后会回到原点
输出答案模998244353后的结果
注意如果两个操作序列存在某一时刻操作不同,则我们认为这两个操作序列不同
输入格式
输入n,表示操作次数
n<=100000
输出格式
按要求输出答案
样例输入
3
样例输出
3
首先不考虑不走的情况,容易发现上下走和左右走是独立的,而只考虑上下走的话等价于一个进出栈序列,那么就是一个卡特兰数,因此我们令不考虑不走,走$2k$步的方案数为$G(2k)$,由于卡特兰数第k项为$\frac{C_{2k}^{k}}{k+1}$,容易得到
$$
G(2k)=\sum_{i=0}^{k}\frac{C_{2i}^{i}}{i+1}\times \frac{C_{2k-2i}^{k-i}}{k-i+1}\times C_{2k}^{2i}
$$
即枚举上下走的步数,然后排列一下。前两项分别表示上下走和左右走的方案数。然后打开组合数得到
$$
G(2k)=\sum_{i=0}^{k}\frac{(2i)!}{i!(i+1)!}\times \frac{(2k-2i)!}{(k-i)!(k-i+1)!}\times\frac{(2k)!}{(2i)!(2k-2i)!}
$$
化简一下得到
$$
G(2k)=(2k)!\sum_{i=0}^{k}\frac{1}{i!(i+1)!}\times\frac{1}{(k-i)!(k-i+1)!}
$$
容易发现这是个卷积,因此可以用NTT来加速。
然后考虑不走的情况,令最终方案数为$F(n)$,容易得到
$$
F(n)=\sum_{i=0}^{n}C_{n}^{i}\times G(n-i)
$$
这也是个卷积,但只需要算一项,那么直接暴力枚举就行了。也可以NTT。
总复杂度$O(n\log n)$
代码:
1 |
|