题目大意:求$n\times2^{\frac{(n-1)(n-2)/2}{2}}\sum\limits_{i=0}^{n-1}\dbinom{n-1}{i}i^k$

数据范围:$n≤10^9$,$k≤10^5$,答案对$998244353$取模。


我们令$F(n,k)=\sum\limits_{i=0}^{n-1}\binom{n-1}{i}i^k$。

那么最终要输出的东西显然就是$n\times2^{\frac{(n-1)(n-2)/2}{2}}F(n,k)$

我们令$G(n,k)=(n-1)^\underline{k}2^{n-1-k}$

我们先考虑下当$k=0$的时候要怎么做,我们显然有:

$F(n,0)=\sum\limits_{i=0}^{n-1}\binom{n-1}{i}=2^{n-1}$

化简是根据二项式定理来的,在此不展开说了。

考虑下当$k=1$的时候要怎么做:

$F(n,1)=\sum\limits_{i=0}^{n-1}\dbinom{n-1}{i}i
\\
=\sum\limits_{i=0}^{n-1}\dfrac{(n-1)!}{i!(n-1-i)!}i
\\
=\sum\limits_{i=1}^{n-1}\dfrac{(n-1)!}{(i-1)!(n-1-i)!}
\\
=\sum\limits_{i=1}^{n-1}\dfrac{(n-1)!}{(i-1)!((n-2)-(i-1))!}
\\
=(n-1)\sum\limits_{i=1}^{n-1}\dfrac{(n-2)!}{(i-1)!((n-2)-(i-1))!}
\\
=(n-1)\sum\limits_{i=1}^{n-1}\dbinom{n-2}{i-1}
\\
=(n-1)F(n-1,0)=G(n,1)$

我们考虑按照$k=1$的化简方法来化简$k=2$,由于跟上文比较相似,所以可能会有不少的跳步

$F(n,2)=\sum\limits_{i=0}^{n-1}\dbinom{n-1}{i}i^2$

$=\sum\limits_{i=0}^{n-1}\dfrac{(n-1)!}{i!(n-1-i)!}i^2$

$=(n-1)\sum\limits_{i=1}^{n-1}\dbinom{n-2}{i-1}i$

$=(n-1)\sum\limits_{i=1}^{n-1}\dfrac{(n-2)!}{(i-1)!\big((n-2)-(i-1)\big)!}\big((i-1)+1\big)$

$=F(n-1,1)+(n-1)\sum\limits_{i=1}^{n-1}\dfrac{(n-2)!}{(i-2)!\big((n-3)-(i-2)\big)!}$

$=F(n-1,1)+(n-1)(n-2)\sum\limits_{i=1}^{n-1}\dfrac{(n-3)!}{(i-2)!\big((n-3)-(i-2)\big)!}$

$=F(n-1,1)+(n-1)(n-2)F(n-2,0)$

$=G(n,1)+G(n,2)$

根据k=2的推法,我们推出了$k=3$和$k=4$的情况:

$F(n,3)=G(n,1)+3G(n,2)+4G(n,3)$

$F(n,4)=G(n,1)+7G(n,2)+6G(n,3)+G(n,4)$

诶?这不是斯特林三角形吗(证明显然,这里不证了)

于是有:

$F(n,m)=\sum\limits_{i=1}^{m}S2(n,i)G(n,i)$

$G(n,1\cdots k)$可以在$O(k)$的时间复杂度内求出来,$S2(n,1\cdots k)$可以在$O(k\log\ k)$的复杂度内用FFT求出来。

完结撒花~

 #include<bits/stdc++.h>
#define MOD 998244353
#define L long long
#define M (1<<18)
#define G 3
using namespace std; L fac[M]={},invfac[M]={};
L pow_mod(L x,L k){L ans=;for(;k>;k>>=,x=x*x%MOD) if(k&) ans=ans*x%MOD; return ans;}
L C(int n,int m){return fac[n]*invfac[m]%MOD*invfac[n-m]%MOD;} void change(L a[],int n){
for(int i=,j=;i<n-;i++){
if(i<j) swap(a[i],a[j]);
int k=n>>;
while(j>=k) j-=k,k>>=;
j+=k;
}
}
void NTT(L a[],int n,int on){
change(a,n);
for(int h=;h<=n;h<<=){
L wn=pow_mod(G,(MOD-)/h);
for(int j=;j<n;j+=h){
L w=;
for(int k=j;k<j+(h>>);k++){
L u=a[k],t=a[k+(h>>)]*w%MOD;
a[k]=(u+t)%MOD;
a[k+(h>>)]=(u-t+MOD)%MOD;
w=w*wn%MOD;
}
}
}
if(on==-){
reverse(a+,a+n);
L INV=pow_mod(n,MOD-);
for(int i=;i<n;i++) a[i]=a[i]*INV%MOD;
}
}
L a[M]={},b[M]={},s[M]={},nc[M]={}; int main(){
fac[]=; for(int i=;i<M;i++) fac[i]=fac[i-]*i%MOD;
invfac[M-]=pow_mod(fac[M-],MOD-);
for(int i=M-;~i;i--) invfac[i]=invfac[i+]*(i+)%MOD;
L n,k,ans=; cin>>n>>k;
if(k==) return printf("%lld\n",n*pow_mod(,(n-)*n/)%MOD);
for(L i=,mul=;i<k;i++){
mul=mul*(n-i-)%MOD;
nc[i+]=mul*pow_mod(,n-i-)%MOD;
}
for(int i=;i<=k;i++){
a[i]=pow_mod(MOD-,i)*invfac[i]%MOD;
b[i]=pow_mod(i,k)*invfac[i]%MOD;
}
int len=; while(k*>=len) len<<=;
NTT(a,len,); NTT(b,len,);
for(int i=;i<len;i++) s[i]=a[i]*b[i]%MOD;
NTT(s,len,-);
for(int i=k+;i<len;i++) s[i]=; for(int i=;i<=k;i++)
(ans+=nc[i]*s[i])%=MOD; cout<<ans*n%MOD*pow_mod(,(n*(n-)/-(n-)))%MOD<<endl;
}

【xsy1301】 原题的价值 组合数+斯特林数+FFT的更多相关文章

  1. 【bzoj5093】 [Lydsy1711月赛]图的价值 组合数+斯特林数+NTT

    Description "简单无向图"是指无重边.无自环的无向图(不一定连通). 一个带标号的图的价值定义为每个点度数的k次方的和. 给定n和k,请计算所有n个点的带标号的简单无向 ...

  2. 【洛谷2791】幼儿园篮球题(第二类斯特林数,NTT)

    [洛谷2791]幼儿园篮球题(第二类斯特林数,NTT) 题面 洛谷 题解 对于每一组询问,要求的东西本质上就是: \[\sum_{i=0}^{k}{m\choose i}{n-m\choose k-i ...

  3. 【CF960G】Bandit Blues(第一类斯特林数,FFT)

    [CF960G]Bandit Blues(第一类斯特林数,FFT) 题面 洛谷 CF 求前缀最大值有\(a\)个,后缀最大值有\(b\)个的长度为\(n\)的排列个数. 题解 完完全全就是[FJOI] ...

  4. 【XSY1301】原题的价值 第二类斯特林数 NTT

    题目描述 给你\(n,m\),求所有\(n\)个点的简单无向图中每个点度数的\(m\)次方的和. \(n\leq {10}^9,m\leq {10}^5\) 题解 \(g_n\)为\(n\)个点的无向 ...

  5. [2016北京集训测试赛17]crash的游戏-[组合数+斯特林数+拉格朗日插值]

    Description Solution 核心思想是把组合数当成一个奇怪的多项式,然后拉格朗日插值..:哦对了,还要用到第二类斯特林数(就是把若干个球放到若干个盒子)的一个公式: $x^{n}=\su ...

  6. hdu 4045 2011北京赛区网络赛F 组合数+斯特林数 ***

    插板法基础知识 斯特林数见百科 #include<iostream> #include<cmath> #include<cstdio> #include<cs ...

  7. BZOJ.5093.[Lydsy1711月赛]图的价值(NTT 斯特林数)

    题目链接 对于单独一个点,我们枚举它的度数(有多少条边)来计算它的贡献:\[\sum_{i=0}^{n-1}i^kC_{n-1}^i2^{\frac{(n-2)(n-1)}{2}}\] 每个点是一样的 ...

  8. 洛谷 P2791 - 幼儿园篮球题(第二类斯特林数)

    题面传送门 首先写出式子: \[ans=\sum\limits_{i=0}^m\dbinom{m}{i}\dbinom{n-m}{k-i}·i^L \] 看到后面有个幂,我们看它不爽,因此考虑将其拆开 ...

  9. poj 1430 Binary Stirling Number 求斯特林数奇偶性 数形结合| 斯特林数奇偶性与组合数的关系+lucas定理 好题

    题目大意 求子集斯特林数\(\left\{\begin{matrix}n\\m\end{matrix}\right\}\%2\) 方法1 数形结合 推荐一篇超棒的博客by Sdchr 就是根据斯特林的 ...

随机推荐

  1. js里typeof和instanceof和箭头表达式要注意的地方,以及其他

    如果学过类似C#这样的语言,然后定义两个类class Mu{}和class Ku{},那么显然typeof Mu != typeof Ku的,但是在js里则不是这样,对于Mu和Ku的对象进行typeo ...

  2. [.Net] 一句话Linq(递归查询)

    功能查询起止日期范围内连续的月份列表. /* Period */ cbxPeriod.DataSource = Enumerable.Range(, ).Select(t => DateTime ...

  3. WUSTOJ 1335: Similar Word(Java)

    题目链接:1335: Similar Word Description It was a crummy day for Lur. He failed to pass to the CET-6 (Col ...

  4. net namespace实验

    Net namespace实验 在 Linux 中,网络名字空间可以被认为是隔离的拥有单独网络栈(网卡.路由转发表.iptables)的环境.网络名字空间经常用来隔离网络设备和服务,只有拥有同样网络名 ...

  5. Maven学习存档(2)——settings.xml配置

    二.settings.xml配置 2.1 原文 <?xml version="1.0" encoding="UTF-8"?> <!-- Lic ...

  6. error: snap "eclipse" has "install-snap" change in progress

    在Ubuntu 18.04使用snap安装eclipse软件报时错: inuxidc@linuxidc:~$ snap install --classic eclipse error: snap &q ...

  7. 基于thymeleaf实现简单登录

    1.引入thymeleaf.静态资源等依赖 <dependency> <groupId>org.springframework.boot</groupId> < ...

  8. HTTP无状态协议理解

    TTP协议是无状态协议. 无状态是指协议对于事务处理没有记忆能力.缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大.另一方面,在服务器不需要先前信息时它的应 ...

  9. C#简单工厂案例

    using System; namespace Application { class JianDanGongChang { static void Main(string[] args) { Fac ...

  10. 委托、Action泛型委托、Func泛型委托、Predicate泛型委托的用法

    一.举一委托场景:天气很热,二狗子想去买瓶冰镇可乐,但是二狗子很懒,于是他想找个人代他去,于是要有个代理人. 创建代理人之前先定义委托:public delegate string BuyColaDe ...