给定正整数 n 和 m,统计满足下列要求的数组 a 的长度之和:
- a,b 长度相同等于 k
- k≥2 且 a1=0,ak=n,b1=0,bk=m。
- ∀1<i≤k,满足:ai≥ai−1 , bi≥bi−1 , 且ai+bi≠ai−1+bi−1。
答案对 998244353 取模.
第一步转化:考虑差分数组。
考虑长度为 k+1 的 a,b 的差分数组,题目就转化成了:
k+1∑i=1ai=nk+1∑i=1bi=m∀2≤i≤k+1,(ai≠0∨bi≠0)=1
最后一个条件不好做,直接考虑二项式反演:钦定 i 个位置打破限制,剩下的位置随便填,前两个条件直接插板做。
n+m∑k=1(k+1)k∑i=0(−1)i(ki)(n+(k−i−1)k−i−1)(m+(k−i−1)k−i−1)=n+m∑k=1k∑i=0(k+1)(−1)i(ki)(n+(k−i−1)k−i−1)(m+(k−i−1)k−i−1)=n+m∑i=0n+m∑k=i(k+1)(−1)i(ki)(n+(k−i−1)k−i−1)(m+(k−i−1)k−i−1)
到这里先考虑枚举 k−i,这样可以把后面两项搞出来。
n+m∑j=0n+m∑i=0(i+j+1)(−1)i(n+j−1j−1)(m+j−1j−1)(i+ji)=n+m∑j=0(n+j−1j−1)(m+j−1j−1)n+m∑i=0(i+ji)(i+j+1)(−1)i=n+m∑j=0(n+j−1j−1)(m+j−1j−1)n+m∑k=j(kj)(k+1)(−1)k+j
现在的问题就在于观察后面的那个求和符号东西能否预处理或者递推处理,预处理是不可能了,考虑递推处理行不行。
设 f(j) 表示 n+m∑k=j(kj)(k+1)(−1)k+j。
f(j)=(j+1)(−1)jn+m∑k=j(k+1j+1)(−1)k
容易发现后面的东西,当 k 为奇数时系数均为负,否则均为正,不妨分开讨论。
设 g(j)=n+m∑k=j(k+1j+1)[kmod2=1],h(j)=n+m∑k=j(k+1j+1)[kmod2=0]
容易发现:g(j+1)=h(j)+h(j+1),h(j+1)=g(j)+g(j+1)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】