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} ...
随机推荐
- 同事写得Python对页面压测脚本
#!/usr/bin/env python # *-* coding:utf-8 *-* import threading import requests import time # headers ...
- mysql uuid() 相同 重复
mysql select UPPER(REPLACE(uuid(),'-','')) from xxxtable 得到相同的uuid的问题 - LWJdear的博客 - CSDN博客 https:// ...
- 理解根目录,classpath, getClass().getResourceAsStream和getClass().getClassLoader().getResourceAsStream的区别
一: 理解根目录 <value>classpath*:/application.properties</value> <value>classpath:/appli ...
- [转帖] bat方式遍历目录内的文件
https://blog.csdn.net/qq_34924407/article/details/82781956 知识挺好用的 学习一下. #所有文件,包括子目录下的文件 @echo offcd ...
- Oracle分析函数row_number()等的使用实例
--分析函数 --rank() over(order by) --值相同,排名相同,序号跳跃 select * from t_account select rank() over(order by u ...
- iframe全屏显示
<iframe webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=" ...
- socket FTP-1
基于socket实现文件的传输以及md5验证 server: import socket import os import hashlib server=socket.socket() server. ...
- 原生JS实现增加删除class
<!DOCTYPE html> <html> <head> <style type="text/css"> .night-mode{ ...
- python之路--BOM和DOM
一. 介绍 之前学的JS的一些简单的语法并没有和浏览器有任何的交互. 我们要想制作一些我们经常看到的网页的一些交互,我们需要继续学习BOM和DOM相关知识. JavaScript 分为 ECMAScr ...
- python之路--内置常用模块
一 . 简单的了解模块 你写的每一个py文件都是一个模块. 还有一些我们一直在使用的模块. buildins 内置模块. print, input. random 主要是和随机相关的的内容 ran ...