BZOJ5093图的价值(斯特林数)
题目描述


S(k,i)为第二类斯特林数,意义为k个小球放入i个不同的盒子里的方案数。
等式的左边意义为把k个不同小球放到x个不同的盒子中的方案数。
右边是在枚举有哪些盒子里有球,还是比较好理解的。
那么我们把这个指数的东西代换完后式子变成了
把枚举j的sigma提前
后面的那个东西看起开很难受,如果我们可以把n和j放在一起,式子就可以往前放了。
从n个小球中选i个,再从i个中选j个等价于从n个小球中选j个,再从剩下的(n-j)个中选(i-j)个。
于是我们就可以吧C(n,j)提前了,后面的组合数可以直接用恒等式换掉。
然后我们只要求出所有S(k,j)就可以了,这个用NTT解决。
代码
#include<iostream>
#include<cstdio>
#define N 2000009
using namespace std;
typedef long long ll;
const int G=;
const int Gi=;
const int mod=;
ll l,L,a[N],b[N],jie[N],ni[N],nii[N],n,k,ans,c[N];
int rev[N];
ll power(ll x,ll y){
if(y<)return ;
ll ans=;x%=mod;
while(y){if(y&)ans=ans*x%mod;x=x*x%mod;y>>=;}
ans=(ans+mod)%mod;
return ans;
}
inline ll ny(ll x){return power(x,mod-);}
inline ll C(ll n,ll m){return jie[n]*ni[m]%mod*ni[n-m]%mod;}
inline void NTT(ll *a,int tag){
for(int i=;i<l;++i)if(i>rev[i])swap(a[i],a[rev[i]]);
for(int i=;i<l;i<<=){
ll wn=power(tag==?G:Gi,(mod-)/(i<<));
for(int j=;j<l;j+=(i<<)){
ll w=;
for(int k=;k<i;++k,w=w*wn%mod){
ll x=a[j+k],y=a[i+j+k]*w%mod;
a[j+k]=(x+y)%mod;a[i+j+k]=(x-y+mod)%mod;
}
}
}
}
int main(){
// cout<<power(3,mod-2);
scanf("%lld%lld",&n,&k);
ll yu=n%mod*power(,(n-)*(n-)/)%mod;n--;
jie[]=;
for(int i=;i<=k;++i)jie[i]=jie[i-]*i%mod;ni[k]=power(jie[k],mod-);
for(int i=k-;i>=;--i)ni[i]=ni[i+]*(i+)%mod;
for(int i=;i<=k;++i)a[i]=(power(-,i)*ni[i]+mod)%mod;
for(int i=;i<=k;++i)b[i]=power(i,k)*ni[i]%mod;
l=;L=;
while(l<=(k<<))l<<=,L++;
for(int i=;i<l;++i)rev[i]=(rev[i>>]>>)|((i&)<<(L-));
NTT(a,);NTT(b,);
for(int i=;i<l;++i)a[i]=a[i]*b[i]%mod;
NTT(a,-);ll nn=ny(l);
c[]=;
for(int i=;i<=min(k,n);++i)c[i]=c[i-]*ny(i)%mod*(n-i+)%mod;
for(int i=;i<=k;++i){
a[i]=a[i]*nn%mod;
(ans+=a[i]*jie[i]%mod*c[i]%mod*power(,n-i)%mod)%=mod;
}
ans=ans*yu%mod;
cout<<ans;
return ;
}
BZOJ5093图的价值(斯特林数)的更多相关文章
- [CF932E]Team Work & [BZOJ5093]图的价值
CF题面 题意:求\(\sum_{i=0}^{n}\binom{n}{i}i^k\) \(n\le10^9,k\le5000\) 模\(10^9+7\) BZOJ题面 题意:求\(n*2^{\frac ...
- 【题解】BZOJ5093图的价值(二项式+NTT)
[题解]BZOJ5093图的价值(二项式+NTT) 今天才做这道题,是我太弱了 强烈吐槽c++这种垃圾语言tmd数组越界不re反倒去别的数组里搞事情我只想说QAQ 推了一张A4纸的式子 考虑每个点的度 ...
- bzoj5093图的价值:多项式,斯特林数(二项式反演)
Description “简单无向图”是指无重边.无自环的无向图(不一定连通). 一个带标号的图的价值定义为每个点度数的k次方的和. 给定n和k,请计算所有n个点的带标号的简单无向图的价值之和. 因为 ...
- BZOJ5093 图的价值(NTT+斯特林数)
显然每个点会提供相同的贡献.于是现在只考虑1号点的贡献.若其度数为i,则在2~n号点选i个连上,剩下的边随便连,这样可以算出答案为 这个式子可以O(n)计算.发现k比较小,于是考虑如何将这个式子化为与 ...
- bzoj5093:图的价值(第二类斯特林数+NTT)
传送门 首先,题目所求为\[n\times 2^{C_{n-1}^2}\sum_{i=0}^{n-1}C_{n-1}^ii^k\] 即对于每个点\(i\),枚举它的度数,然后计算方案.因为有\(n\) ...
- BZOJ5093 图的价值——推式子+第二类斯特林数
原题链接 题解 题目等价于求这个式子 \[ans=n2^{\frac{(n-1)(n-2)}{2}}\sum\limits_{i=0}^{n-1}\binom{n-1}{i}i^k\] 有这么一个式子 ...
- [BZOJ5093]图的价值(NTT+第二类Stirling数)
5093: [Lydsy1711月赛]图的价值 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 250 Solved: 130[Submit][Sta ...
- Bzoj5093: 图的价值
题面 Bzoj Sol 一张无向无重边自环的图的边数最多为\(\frac{n(n-1)}{2}\) 考虑每个点的贡献 \[n*2^{\frac{n(n-1)}{2} - (n-1)}\sum_{i=0 ...
- 【学术篇】CF932E Team Work && bzoj5093 图的价值
两个题的传送门 对于CF这道题, 分别考虑每种可能的集合大小, 每个大小为\(k\)的集合数量有\(\binom nk\)个, 所以最后的答案就是 \[\sum_{i=0}^n\binom{n}{i} ...
随机推荐
- 01-学习vue前的准备工作
起步 1.扎实的HTML/CSS/Javascript基本功,这是前置条件. 2.不要用任何的构建项目工具,只用最简单的<script>,把教程里的例子模仿一遍,理解用法.不推荐上来就直接 ...
- Notepad++插件下载和介绍
20款Notepad++插件下载和介绍 - findumars - 博客园https://www.cnblogs.com/findumars/p/5180562.html
- c# Mongodb两个字段不相等 MongoDB原生查询
var document = new BsonDocument{ { "$where","this.StarTime!=this.EndTime"}, { }, ...
- Oracle如何扩展表空间
一: --查看表空间的名字及文件所在位置 select tablespace_name, file_id, file_name, ), ) total_space from sys.dba_data_ ...
- VS如何在调试时进入到dll文件
背景: 项目A:用C#写的一个类库文件 项目B:引用项目A的dll文件,完成编码,也是C#编写的. 需求:怎么能在调试的时候,调试断点能够从项目B中进入项目A中的代码. 解决办法就是: 假设,项 ...
- idea打包springboot+maven项目并发布在linux上
2018年11月13日我亲测有效的,很简单的,借鉴博客:https://blog.csdn.net/smilecall/article/details/56288972 第一步:随便建一个maven类 ...
- display设置弹性盒布局
转自:http://blog.csdn.net/itbwy/article/details/52648711 网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 ...
- iframe全屏显示
<iframe webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=" ...
- hadoop 管理命令dfsadmin
hadoop 管理命令dfsadmin dfsadmin 命令用于管理HDFS集群,这些命令常用于管理员. 1. (Safemode)安全模式 动作 命令 把集群切换到安全模式 bin/hdfs df ...
- hive条件函数
case相当于if,when相当于=:then是条件满足的结论.否则实行else后语句,一end结束