题目大意:求$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. Appium移动自动化测试-----(十三)appium API 之其他操作

    其它操作针对移动设备上特有的一些操作. 1.熄屏 方法: * lockDevice() 点击电源键熄灭屏幕. 在iOS设备可以设置熄屏一段时间.Android上面不带参数,所以熄屏之后就不会再点亮屏幕 ...

  2. feign学习笔记

    使用:

  3. mysql查看索引的大小

    1 ,show table status from your_database_name  这个不准: 2,这个比较详细 select database_name, table_name, index ...

  4. Linux和Windows系统目录结构区别

    Windows目录结构图 Linux目录结构图 我们所有的操作尽量都要在/home/username目录下进行. 快捷进入家目录方式是cd ~.

  5. 【SCALA】3、模拟电路

    Simulation package demo17 abstract class Simulation { type Action = () => Unit case class WorkIte ...

  6. 去除echarts饼状图的引导线

    series: { name: "流量占比分布", type: "pie", radius: ["40%", "60%" ...

  7. (转)FFMPEG类库打开流媒体的方法(需要传参数的时候)

    本文链接:https://blog.csdn.net/leixiaohua1020/article/details/14215393 使用ffmpeg类库进行开发的时候,打开流媒体(或本地文件)的函数 ...

  8. Lambda 表达式动态拼接.

    背景: 项目使用EF 查询时需要手动判断条件写.觉得太麻烦就Google 如何动态生成Linq.最后找到了 System.Linq.Dynamic.Core. 这个东西. Scott Guthrie ...

  9. vue-cli3.0 关闭eslint校验

    1. 跟着课程学习vue高级训练营时,vue-cli老是报eslint校验错误,把它关了! 网上找到了图中这个写法,可是报错啊! 解决办法:把false改为true   参考:https://blog ...

  10. 【转载】常见面试题:C#中String和string的区别分析

    在很多人面试C#开发工程师的时候,会遇到一个面试题,就是C#中String和string有啥区别.其实针对这个问题C#中String和string没有本质上的区别,两者在程序中都可使用,稍微的一个区别 ...