【做题记录】CEOI2004 Sweet
-
- 算法:生成函数
题目:
有 堆糖果。不同的堆里糖果的种类不同(即同一个堆里的糖果种类是相同的,不同的堆里的糖果的种类是不同的)。第 个堆里有 个糖果。现在要吃掉至少 个糖果,但不超过 个。求有多少种方案。
两种方案不同当且仅当吃的个数不同,或者吃的糖果中,某一种糖果的个数在两个方案中不同。
题解:
每种糖果 个,直接构造每种糖果的生成函数相乘
对于答案其实就是 ,
对于分母对 次项的贡献是
而分子我们不太好直接求,发现只有 项,于是直接爆搜即可。
分子求出来的第次项的系数我们设为 。
而在求 时,它的答案应该是
发现后面这个东西 是杨辉三角的同一列
稍微画一下即可发现杨辉三角的性质,就可以把这个东西转化为 了
于是答案就是
那么搜分子的时候每次统计答案即可。
还有个细节是这题要对 取模,不是质数,所以不能直接逆元。
但是我们在求组合数时要求的是 ,也就是
把 约掉,我们就只用除以 这个东西了, 非常小, 也非常小,那我们直接对 取模就好了,最后返回答案时再除以一个 即可。
本文作者:trsins
本文链接:https://www.cnblogs.com/trsins/p/15776595.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步