题目大意:求$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. 浅谈PHP随机数安全的分析

    之前在身边有很多学PHP的朋友写一些小程序的时候,很多时候会使用PHP随机数函数rand()和mt_rand()函数去生成随机数 可是,随机数真的随机吗?这篇文章讲从多个实例中探讨随机数,当然,有写作 ...

  2. ES-IK分词器

    一.安装 https://www.cnblogs.com/wudequn/p/11001382.html https://github.com/medcl/elasticsearch-analysis ...

  3. springboot2.x日志配置记录

    springboot日志管理: springboot2.x默认使用commons-logging作为内部日志的输出,日志的实现可以选择Java Util Logging,Log4J2和logback如 ...

  4. WUSTOJ 1346: DARK SOULS(Java)并查集

    题目链接:1346: DARK SOULS 并查集系列:WUSTOJ 1319: 球(Java)并查集 Description CQ最近在玩一款游戏:DARK SOULS,这是一款以高难度闻名的硬派动 ...

  5. 嵌入式Linux学习笔记之第二阶段---文件I/O

    1.文件IO的四个函数 一些术语: 不带缓冲的I/O: 每个read和write都调用内核中的一个系统调用. 文件描述符: 一个非负整数,对内核而言,所以打开的文件都通过文件描述符引用. ①打开或创建 ...

  6. 十分钟快速创建 Spring Cloud 项目

    一般来说,Intelij IDEA 可以通过 Maven Archetype 来快速生成Maven项目,其实 IDEA 集成了 Spring 官方提供的 Spring Initializr,可以非常方 ...

  7. WxWidgets与其他工具包的比较(15种方案)

    一些一般注意事项: wxWidgets不仅适用于C ++,而且具有python,perl,php,java,lua,lisp,erlang,eiffel,C#(.NET),BASIC,ruby甚至ja ...

  8. AtCoder Grand Contest 034

    A:如果C在D左侧,显然先让B到达终点再让A走即可,否则先判断一下A是否可以在某处超过B.也就是先判断一下起点与终点之间是否有连续的障碍,若有则无解:然后若C在D左侧输出Yes,否则判断B和D之间是否 ...

  9. redis列表数据类型---list

    一.概述 redis列表是简单的字符串列表,按照插入顺序排序 可以添加一个元素到列表的头部(左边)或者尾部(右边) 一个列表最多可以包含2^32-1个元素(每个列表超过40亿个元素). 二.redis ...

  10. Nginx 配置反向代理ip

    参考文档: https://blog.csdn.net/stevenprime/article/details/7918094