CF961G Partitions(第二类斯特林数)
题目
前置
斯特林数\(\Longrightarrow\)斯特林数及反演总结
做法
相信大家能得出一个一眼式:$$Ans=\sum\limits_{i=1}^n w_i\sum\limits_{s=1}^n s\cdot C_{n-1}^{s-1}\begin{Bmatrix}k-1\n-s\end{Bmatrix}$$
然后就开始推式:
Sum&=\sum\limits_{s=1}^n s\cdot C_{n-1}^{s-1}\begin{Bmatrix}n-s\\k-1\end{Bmatrix}\\
&=\sum\limits_{s=1}^n s\cdot C_{n-1}^{s-1}\sum\limits_{i=0}^{k-1}\frac{(-1)^i}{i!}\frac{(k-i-1)^{n-2}}{(k-i-1)!}\\\
&=\sum\limits_{i=0}^{k-1}\frac{(-1)^i}{i!(k-i-1)!}\sum\limits_{s=1}^n s\cdot C_{n-1}^{s-1}(k-i-1)^{n-s}\\
&=\sum\limits_{i=0}^{k-1}\frac{(-1)^i}{i!(k-i-1)!}(\sum\limits_{s=1}^nC_{n-1}^{s-1}(k-i-1)^{n-s}+\sum\limits_{s=1}^n (s-1)C_{n-1}^{s-1}(k-i-1)^{n-s})\\
&=\sum\limits_{i=0}^{k-1}\frac{(-1)^i}{i!(k-i-1)!}(\sum\limits_{s=1}^nC_{n-1}^{s-1}(k-i-1)^{n-s}+(n-1)\sum\limits_{s=1}^n C_{n-2}^{s-2}(k-i-1)^{n-s})\\
&=\sum\limits_{i=0}^{k-1}\frac{(-1)^i}{i!(k-i-1)!}((k-i)^{n-1}+(n-1)(k-i)^{n-2})\\
&=\sum\limits_{i=0}^{k-1}\frac{(-1)^i}{i!(k-i-1)!}(k-i)^{n-2}(k-i+n-1)\\
\end{aligned}\]
然而。。。这。。。比赛的时候能推出这么一大堆式子的**是神仙吧
于是有种更简单的方法:\(|S|\sum w_i\)
我们可以理解为:划分好集合后,每个点都对当前点有\(w_i\)的贡献
自己对自己的贡献显然就是\(\begin{Bmatrix}n\\k\end{Bmatrix}\)
其他点对本身的贡献就是先分好\(k\)个集合,再放进去,\((n-1)\begin{Bmatrix}n-1\\k\end{Bmatrix}\)
\]
Code
有关斯特林数及反演的更多姿势\(\Longrightarrow\)点这里
#include<cstdio>
typedef int LL;
const LL mod=1e9+7,maxn=2e5+9;
inline LL Read(){
LL x(0),f(1); char c=getchar();
while(c<'0' || c>'9'){
if(c=='-') f=-1; c=getchar();
}
while(c>='0' && c<='9'){
x=(x<<3)+(x<<1)+c-'0'; c=getchar();
}
return x*f;
}
inline LL Pow(LL base,LL b){
LL ret(1);
while(b){
if(b&1) ret=1ll*ret*base%mod; base=1ll*base*base%mod; b>>=1;
}return ret;
}
LL fav[maxn],fac[maxn];
inline LL Get(LL n,LL m){
LL ret(0);
for(LL i=0;i<=m;++i)
ret=1ll*(ret+1ll*(i&1?mod-1:1)*fav[i]%mod*Pow(m-i,n)%mod*fav[m-i]%mod)%mod;
return ret;
}
LL n,sum,k;
LL w[maxn];
int main(){
n=Read(); k=Read();
for(LL i=1;i<=n;++i){
w[i]=Read();
(sum+=w[i])%=mod;
}
fac[0]=fac[1]=1;
for(LL i=2;i<=n;++i) fac[i]=1ll*fac[i-1]*i%mod;
fav[n]=Pow(fac[n],mod-2);
for(LL i=n;i>=1;--i) fav[i-1]=1ll*fav[i]*i%mod;
printf("%d\n",1ll*sum*((1ll*Get(n,k)%mod+1ll*(n-1)*Get(n-1,k)%mod)%mod)%mod);
return 0;
}
CF961G Partitions(第二类斯特林数)的更多相关文章
- 【CF961G】Partitions 第二类斯特林数
[CF961G]Partitions 题意:给出n个物品,每个物品有一个权值$w_i$,定义一个集合$S$的权值为$W(S)=|S|\sum\limits_{x\in S} w_x$,定义一个划分的权 ...
- 【CF961G】Partitions(第二类斯特林数)
[CF961G]Partitions(第二类斯特林数) 题面 CodeForces 洛谷 题解 考虑每个数的贡献,显然每个数前面贡献的系数都是一样的. 枚举当前数所在的集合大小,所以前面的系数\(p\ ...
- CF961G Partitions(第二类斯特林数)
传送门 对于每一个元素,我们只要能求出它的出现次数\(sum\),那么每个元素的贡献都是一样的,最终的答案为\(sum\times \sum_{i=1}^n w_i\) 那么分别讨论 如果这个元素自己 ...
- 【cf961G】G. Partitions(组合意义+第二类斯特林数)
传送门 题意: 给出\(n\)个元素,每个元素有价值\(w_i\).现在要对这\(n\)个元素进行划分,共划分为\(k\)组.每一组的价值为\(|S|\sum_{i=0}^{|S|}w_i\). 最后 ...
- 【BZOJ5093】图的价值(第二类斯特林数,组合数学,NTT)
[BZOJ5093]图的价值(第二类斯特林数,组合数学,NTT) 题面 BZOJ 题解 单独考虑每一个点的贡献: 因为不知道它连了几条边,所以枚举一下 \[\sum_{i=0}^{n-1}C_{n-1 ...
- 【BZOJ4555】求和(第二类斯特林数,组合数学,NTT)
[BZOJ4555]求和(第二类斯特林数,组合数学,NTT) 题面 BZOJ 题解 推推柿子 \[\sum_{i=0}^n\sum_{j=0}^iS(i,j)·j!·2^j\] \[=\sum_{i= ...
- CF932E Team Work(第二类斯特林数)
传送门:CF原网 洛谷 题意:给定 $n,k$,求 $\sum\limits^n_{i=1}\dbinom{n}{i}i^k\bmod(10^9+7)$. $1\le n\le 10^9,1\le k ...
- HDU - 4625 JZPTREE(第二类斯特林数+树DP)
https://vjudge.net/problem/HDU-4625 题意 给出一颗树,边权为1,对于每个结点u,求sigma(dist(u,v)^k). 分析 贴个官方题解 n^k并不好转移,于是 ...
- 【CF932E】Team Work(第二类斯特林数)
[CF932E]Team Work(第二类斯特林数) 题面 洛谷 CF 求\(\sum_{i=1}^nC_{n}^i*i^k\) 题解 寒假的时候被带飞,这题被带着写了一遍.事实上并不难,我们来颓柿子 ...
随机推荐
- Ubuntu上安装与配置JDK1.8
Ubuntu上安装与配置JDK1.8 一.下载 下载JDK,由于是Ubuntu. 所以去官网下载tar.gz格式的就可以(ubuntu使用浏览器下载网速比較慢,所以推荐到window上下载好). ht ...
- iOS项目开发实战——自己定义圆形进度提示控件
iOS中默认的进度条是水平方向的进度条,这往往不能满足我们的需求. 可是我们能够自己定义类似的圆形的进度提示控件,主要使用iOS中的画图机制来实现. 这里我们要实现一个通过button点击然后圆形进度 ...
- sql privot
http://www.studyofnet.com/news/295.html 本文导读:T-SQL语句中,Pivot运算符用于在列和行之间对数据进行旋转或透视转换,PIVOT命令可以实现数据表的列转 ...
- 最近5年133个Java面试问题列表
Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来越高级,面试官问的问题也更深入. 在我 ...
- Vue.js_判断与循环
一.判断,条件语句 1.一元表达式判断 {{ ok ? 'show' : 'hide' }} 2.if判断 v-if='ok' <ol id="ifGrammar"> ...
- PAT 甲级 1003Emergency(Dijkstra最短路)
1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...
- HDU 1232 畅通工程(Kruskal)
畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- Spring容器初始化的时候如何添加一个定时器?
昨天遇到这个问题,在项目启动的时候添加一个定时器隔一段时间扫描有没有定时发送的邮件(当然也可以是你自己的业务逻辑),也在网上找了资料,加上自己的修改,终于成功了.所以来做个记录. 1.ServletC ...
- salt常用命令、模块、执行
一.salt常用命令 salt 该命令执行salt的执行模块,通常在master端运行,也是我们最常用到的命令 salt [options] '<target>' <function ...
- 《挑战程序设计竞赛》2.5 最短路 AOJ0189 2249 2200 POJ3255 2139 3259 3268(5)
AOJ0189 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0189 题意 求某一办公室到其他办公室的最短距离. 多组输入,n表示 ...