题解 | #あなたの蛙が帰っています#
あなたの蛙が帰っています
https://www.nowcoder.com/practice/44a2fc12a92a4eccb13a78eabfb67063
注意到,题目所求的答案,即为卡特兰数相邻两项的差。
这里给出卡特兰数的前 项(下标从0开始)。
1, 1, 2, 5, 14,
42, 132, 429, 1430, 4862,
16796, 58786, 208012, 742900, 2674440,
9694845, 35357670, 129644790, 477638700, 769018837,
574654302, 508402548, 642327517, 661800571, 172443248,
496402342, 655221305, 840507789, 812999877, 893261956
卡特兰数可以用递推式求出:
因为数据增长很快,题目要求你进行取模。
此时除法需要转换为对应的逆元。
考虑到 998244353 是一个大素数,和小于它的任何正整数都互质。
所以可以使用费马小定理, 。
这里的 pow 需要使用快速幂求解,朴素乘法会超时,浮点函数会爆精度。
最后作差的时候,需要注意规约到 [0,mod) 的范围内,因为有可能出现 。
只需加一点修饰 。
python 参考代码:
mod=998244353
N=100100
k=[0]*N
k[0]=k[1]=1
for i in range(2,N):
k[i]=k[i-1]*(4*i-2)%mod*pow(i+1,mod-2,mod)%mod
t=int(input())
for i in range(1,t+1):
n=int(input())
print('Case #%d: %d'%(i,(k[n]-k[n-1]+mod)%mod))
汤臣倍健公司氛围 361人发布
查看3道真题和解析