P6620 [省选联考 2020 A 卷] 组合数问题(斯特林数、下降幂)

解析

给出 n,x,pn,x,pn,x,p 和一个 mmm 次的多项式 f(k)f(k)f(k),求解:
∑k=0nf(k)xk(nk)modp\sum_{k=0}^nf(k)x^k\binom n k\mod pk=0nf(k)xk(kn)modp
把多项式拆成若干个单项式,现在就是要求:
∑k=0nkpxk(nk)\sum_{k=0}^nk^px^k\binom n kk=0nkpxk(kn)
直接拆阶乘,可以得到:
(nk)k=n(n−1k−1)\binom n kk=n\binom {n-1}{k-1}(kn)k=n(k1n1)
尝试把 kpk^pkp 揉进组合数:
(nk)k=n(n−1k−1)\binom n k k=n\binom {n-1}{k-1}(kn)k=n(k1n1)
(nk)k2=kn(n−1k−1)=n(n−1)(n−2k−2)+n(n−1k−1)\binom n k k^2=kn\binom {n-1}{k-1}=n(n-1)\binom{n-2}{k-2}+n\binom{n-1}{k-1}(kn)k2=kn(k1n1)=n(n1)(k2n2)+n(k1n1)
(nk)k3=k(n(n−1)(n−2k−2)+n(n−1k−1))\binom n k k^3=k(n(n-1)\binom{n-2}{k-2}+n\binom{n-1}{k-1})(kn)k3=k(n(n1)(k2n2)+n(k1n1))
=n(n−1)(n−2)(n−3k−3)+2n(n−1)(n−2k−2)+n(n−1)(n−2k−2)+n(n−1k−1)=n(n-1)(n-2)\binom{n-3}{k-3}+2n(n-1)\binom{n-2}{k-2}+n(n-1)\binom{n-2}{k-2}+n\binom{n-1}{k-1}=n(n1)(n2)(k3n3)+2n(n1)(k2n2)+n(n1)(k2n2)+n(k1n1)
=n(n−1)(n−2)(n−3k−3)+3n(n−1)(n−2k−2)+n(n−1k−1)=n(n-1)(n-2)\binom{n-3}{k-3}+3n(n-1)\binom{n-2}{k-2}+n\binom{n-1}{k-1}=n(n1)(n2)(k3n3)+3n(n1)(k2n2)+n(k1n1)
归纳以下,可以有:
(nk)kp=∑i=1pni‾(n−ik−i)s(p,i)\binom n k k^p=\sum_{i=1}^pn^{\underline i}\binom {n-i}{k-i}s(p,i)(kn)kp=i=1pni(kini)s(p,i)
其中 s(p,i)s(p,i)s(p,i) 为转移系数。
考虑这个转移系数怎么来的,它可以从 p−1p-1p1 行的 s(p−1,i)s(p-1,i)s(p1,i)kkk 拆出一个 (k−i),i(k-i),i(ki),i 时得到 i∗s(p−1,i)i*s(p-1,i)is(p1,i),也可以从 s(p−1,i−1)s(p-1,i-1)s(p1,i1) 升一个上来,所以有:
s(p,i)=i∗s(p−1,i)+s(p−1,i−1)s(p,i)=i*s(p-1,i)+s(p-1,i-1)s(p,i)=is(p1,i)+s(p1,i1)
边界为:s(1,1)=1s(1,1)=1s(1,1)=1
注意到,这个东西其实就是第二类斯特林数
那么我们接着推:
∑k=0nkpxk(nk)=∑k=0nxk∑i=1pni‾(n−ik−i)s(p,i)=∑i=1pni‾s(p,i)∑k=inxk(n−ik−i)\sum_{k=0}^nk^px^k\binom n k=\sum_{k=0}^nx^k\sum_{i=1}^pn^{\underline i}\binom {n-i}{k-i}s(p,i)=\sum_{i=1}^pn^{\underline i}s(p,i)\sum_{k=i}^nx^k\binom {n-i}{k-i}k=0nkpxk(kn)=k=0nxki=1pni(kini)s(p,i)=i=1pnis(p,i)k=inxk(kini)
=∑i=1pni‾s(p,i)xi∑k=0n−ixk(n−ik)=∑i=1pni‾s(p,i)xi(1+x)n−i=\sum_{i=1}^pn^{\underline i}s(p,i)x^i\sum_{k=0}^{n-i}x^k\binom {n-i}{k}=\sum_{i=1}^pn^{\underline i}s(p,i)x^i(1+x)^{n-i}=i=1pnis(p,i)xik=0nixk(kni)=i=1pnis(p,i)xi(1+x)ni
带回到最初的式子:(注意前面的式子需要 p≥1p\ge 1p1,所以常数项单独算)
ans=∑p=1map∑i=1pni‾s(p,i)xi(1+x)n−i+a0(1+x)nans=\sum_{p=1}^ma_p\sum_{i=1}^pn^{\underline i}s(p,i)x^i(1+x)^{n-i}+a_0(1+x)^nans=p=1mapi=1pnis(p,i)xi(1+x)ni+a0(1+x)n
=∑i=1mxi(1+x)n−ini‾∑p=imaps(p,i)=\sum_{i=1}^mx^i(1+x)^{n-i}n^{\underline i}\sum_{p=i}^ma_ps(p,i)=i=1mxi(1+x)ninip=imaps(p,i)
总复杂度 O(m(m+log⁡n))O(m(m+\log n))O(m(m+logn))

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define ok debug("OK\n")
using namespace std;const int N=1050;
const int inf=1e9;
int mod;inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)) {if(c=='-')f=-1;c=getchar();}while(isdigit(c)) {x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}inline ll ksm(ll x,ll k){ll res(1);while(k){if(k&1) res=res*x%mod;x=x*x%mod;k>>=1;}return res;
}int n,m,x;
ll s[N][N],a[N];signed main() {
#ifndef ONLINE_JUDGE//freopen("a.in","r",stdin);//freopen("a.out","w",stdout);
#endifn=read();x=read();mod=read();m=read();for(int i=0;i<=m;i++) a[i]=read();ll ans=a[0]*ksm(x+1,n)%mod;s[0][0]=1;for(int i=1;i<=m;i++){for(int j=1;j<=i;j++) s[i][j]=(j*s[i-1][j]+s[i-1][j-1])%mod;}for(int j=1;j<=m;j++){ll bas=ksm(x,j)*ksm(x+1,n-j)%mod;for(int i=1;i<=j;i++) bas=bas*(n-i+1)%mod;//ll res(0);for(int i=j;i<=m;i++) (ans+=bas*s[i][j]%mod*a[i])%=mod;}printf("%lld\n",ans);return 0;
}
/*
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CF750G New Year and Binary Tree Paths(数位dp二进制+数学)

CF750G New Year and Binary Tree Pathsdescriptionsolutioncodedescription 题目链接 一颗无穷个节点的完全二叉树。 求有多少条树上的简单路径编号和为 s。 s≤1e15s\le 1e15s≤1e15 solution 一条单链的情况 考虑从节点xxx开始走一条节点个数是hhh的链&#xff08;链长为…

eShopOnContainers 知多少[9]:Ocelot gateways

引言客户端与微服务的通信问题永远是一个绕不开的问题&#xff0c;对于小型微服务应用&#xff0c;客户端与微服务可以使用直连的方式进行通信&#xff0c;但对于对于大型的微服务应用我们将不得不面对以下问题&#xff1a;如何降低客户端到后台的请求数量&#xff0c;并减少与…

Acwing 1072. 树的最长路径

Acwing 1072. 树的最长路径 题意&#xff1a; 每个边有权值&#xff0c;求树的直径 题解&#xff1a; 两遍dfs可以求&#xff0c;这里用树形dp的方法&#xff0c;我们将1作为根节点来看这棵树 我们可以将点看作是钉子&#xff0c;边就是挂在钉子上的绳子&#xff0c;我们只…

模板:矩阵树定理

文章目录前言解析无向图有向图根向树叶向树code带权图code所谓矩阵树定理&#xff0c;就是用矩阵解决树问题的定理。 &#xff08;逃&#xff09; 前言 神奇科技。 之前一直没有写博客&#xff0c;觉得还是写一发比较好。 证明什么的是不可能会的 背下来背下来&#xff01; …

P2016 战略游戏

P2016 战略游戏 题意&#xff1a; 他要建立一个古城堡&#xff0c;城堡中的路形成一棵无根树。他要在这棵树的结点上放置最少数目的士兵&#xff0c;使得这些士兵能了望到所有的路。 注意&#xff0c;某个士兵在一个结点上时&#xff0c;与该结点相连的所有边将都可以被了望…

.NET/C# 获取一个正在运行的进程的命令行参数

在自己的进程内部&#xff0c;我们可以通过 Main 函数传入的参数&#xff0c;也可以通过 Environment.GetCommandLineArgs 来获取命令行参数。但是&#xff0c;可以通过什么方式来获取另一个运行着的程序的命令行参数呢&#xff1f;进程内部获取传入参数的方法&#xff0c;可以…

CF896E Welcome home,Chtholly/[Ynoi2018]五彩斑斓的世界(并查集+第二分块)

CF896E Welcome home,Chtholly/[Ynoi2018]五彩斑斓的世界descriptionsolutioncodedescription 五彩斑斓的世界 CF896E Welcome home,Chtholly 五彩斑斓的世界是加强版&#xff0c;所以下面的题解部分是写的加强版 solution 第二分块 查询操作中把>x>x>x的数全都…

Defuse the Bombs Gym - 102822D

Defuse the Bombs Gym - 102822D 题目&#xff1a; 给你n个数&#xff0c;现在每轮会有三个操作&#xff1a; 1.选择一个数&#xff0c;使他加一 2.所有数减一 3.当有一个数变成负数时结束操作&#xff0c;否则回到第一步 问最多能进行几次第一步&#xff1f; 题解&#xff…

P4364 [九省联考 2018] IIIDX(线段树、贪心)

解析 感觉不至于黑的题。 然而我并不会做 did_idi​ 互不相同的时候直接无脑贪心即可&#xff0c;这样55分的好成绩就到手了。&#xff08;交完发现可以骗到60&#xff09; 滚榜级的良心分了属于是。 考虑有相同时如何做。 先把值降序排序&#xff0c;然后维护一棵线段树&…

CF1491H Yuezheng Ling and Dynamic Tree(分块)

CF1491H Yuezheng Ling and Dynamic Treedescriptionsolutioncodedescription 题目链接 solution 非常清新的小分块题了 前提&#xff1a;将序列分成n\sqrt{n}n​块&#xff0c;每块有n\sqrt{n}n​个数&#xff0c;记第iii个块的左右边界为Li,RiL_i,R_iLi​,Ri​&#xff0…

听说,霸都.NET技术社区准备搞线下聚会了?

.NET Core实战项目交流群日常交流嗨&#xff0c;你听说了没有&#xff1f;霸都.NET技术社区准备搞线下聚会了&#xff01;啥时候的事情啊&#xff1f;最近才知道的消息啊&#xff01;那你是从哪里知道的消息呢&#xff1f;.NET Core项目实战交流群&#xff08;637326624&#x…

Knowledge is Power Gym - 102822K

Knowledge is Power Gym - 102822K 题意&#xff1a; 给你一个数n&#xff0c;让你将n分解成一些互质的数&#xff0c;然后这些数的最大值减最小值要求最小&#xff0c;如果不行输出-1&#xff0c;否则输出最大值减最小值的最小情况 题解&#xff1a; 具体做法是通过枚举大…

P4383 [八省联考 2018] 林克卡特树(wqs二分、树形dp)

解析 它还真的不难。 乐。 这题没做出来有些谔谔。 外层wqs二分显而易见&#xff0c;里面不知道为啥我总觉得这个题可以贪心。 然后一直试图在原树直径上下功夫&#xff0c;一筹莫展。 看到题解“dp”两个字这题也就做完了… 就相当于要把一棵树分成若干条无交链&#xff0c;每…

ASP.NET Core中实现单体程序的事件发布/订阅 - LamondLu - 博客园

标题&#xff1a;ASP.NET Core中实现单体程序的事件发布/订阅作者&#xff1a;Lamond Lu地址&#xff1a;https://www.cnblogs.com/lwqlun/p/10468058.html项目源代码&#xff1a;https://github.com/lamondlu/EventHandlerInSingleApplication背景事件发布/订阅是一种非常强大…

CF1592E Bored Bakry(二进制+前缀异或和)

CF1592E Bored Bakrydescriptionsolutioncodedescription 题目链接 solution and\text{and}and如果第iii位为111&#xff0c;意味着区间内每个数的第iii位都是111 xor\text{xor}xor如果第iii位为111&#xff0c;意味着区间内有奇数个第iii位为111 这种涉及二进制操作的一般都…

Joy of Handcraft Gym - 102822J(线段树或差分)

Joy of Handcraft Gym - 102822J 题意&#xff1a; 每个灯有亮的周期和亮度&#xff0c;问1~m这段时间灯光最亮是多少 题解&#xff1a; 线段树维护区间最大值 根据灯的周期向这段区间加亮度k&#xff0c;然后利用线段树维护区间最大值 但是这样会超时&#xff0c;加个小优…

.NET Core 使用 HttpClient SSL 请求出错的解决办法

问题使用 HTTP Client 请求 HTTPS 的 API 时出现 The certificate cannot be verified up to a trusted certification authority 异常&#xff0c;并且证书已经传入。下面就是问题代码&#xff1a;public class Program{public static void Main(string[] args){var url &quo…

CF1580C Train Maintenance(分块)

CF1580C Train Maintenancedescriptionsolutioncodedescription 题目链接 solution 这是一种利用根号平衡时间复杂度的套路 分α\alphaα【操作参数】与n\sqrt{n}n​的关系&#xff0c;一半采取暴力&#xff0c;一半利用工具特殊处理 对于本题&#xff0c;假设第iii辆车的加…

P3746 [六省联考 2017] 组合数问题(倍增、dp)

解析 再次被“组合数问题”吊打qwq 和上一次不一样的是&#xff0c;这次更加被恶心到了。 一方面受上一个组合数问题影响&#xff0c;另外出题人也十分阴间&#xff0c;一开始还给了个组合数的公式&#xff0c;更加使我坚定的认为这是一道数学推柿子题。 然后就开始各种打表玩…

CF1473E Minimum Path(拆点+最短路)

CF1473E Minimum Pathdescriptionsolutioncodedescription 题目链接 solution 看到 ∑i1kwei\sum_{i1}^kw_{e_i}∑i1k​wei​​ 的式子&#xff0c;就应该联想到最短路 先考虑题目的弱化版&#xff0c;去掉 max,min\text{max},\text{min}max,min 的限制&#xff0c;变成一条…