Description
Private link.
给定 N,L,X,Y,K,求选出 0≤a1≤a2≤⋯aN−1≤X<Y≤aN≤L,使得 ∑N−1i=1ai>aN,且不存在某个 t 在 a1..N 中出现超过 K 次的方案数。答案对 (109+7) 取模。
N≤8,其他 ≤109。
Solution
我走起来就是一个二元 GF:
⋯=X∏i=01−yK+1xi(K+1)1−yxi.
止步于此,大脑空空。惨痛地,我们认识到,尽量不要为了在“描述”时偷懒,毫无顾忌地引入二元。
先从 K 次入手,为方便描述集合划分,钦定 a1..N 乱序排列。那么,设某个值出现了 t 次,就应当有描述其方案数贡献的 EGF 中,[zt]G(t)=[t≤K]t!⋅1t!=[t≤K]。我们可以 O(partition(N)) 枚举出现次数集合,却很难保证不同集合对应的值确实不同。为此,考虑一个被钦定大小为 t 的集合的容斥因子贡献,设其 EGF 为 F(z),就有 G=expF⇒F=lnG,[zt]F(z) 就是该集合的容斥系数。
接着描述选出前 N−1 个数的过程。枚举 n−1 的划分 c1..m,有
M(z)=m∏i=11−zci(X+1)1−zci.
对于 s=∑N−1i=1∈(Y,L],其对应 aN 的方案数为 s−Y。这一部分的和为
L∑s=Y+1(i−Y)[zi]M(z)=([zL]−[zY])(z1−zM′(z)−Y1−zM(z)).
用 EI 求 [zn]P(z)/Q(z) 的科技(就是常系数齐次线性递推那个)可以算出来。对于 s>L,其贡献为
([z∞]−[zL])11−zM(z).
令 z→1 洛一洛就能算前一项,后一项和前面类似。复杂度大概是 O(partition(n)polylog(n)logL)。
Code
呜……不想写。
所以上面的式子可能都是错的,诶嘿。(
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2021-05-30 Solution -「UR #21」「UOJ #632」挑战最大团