CF961G Partitions
显然每个数的贡献可以一起算感性理解一下,于是答案就是权值总和乘以每个数被算了几次
那个"集合大小为\(|S|\)的集合权值为权值和乘\(|S|\)",可以看成一个数所在集合每有一个数,这个数就要算一次,于是那个次数就是所有情况中有某个数和多少次数出现在过同一个集合中.首先他一直会和自己在同一个集合,所以方案为\(S(n,k)\).然后对于其他数,方案为\(S(n-1,k)*(n-1)\),也就是其他数先放好,然后其他所有数都会让当前这个数多加1次
关于\(S(n,k)\)强烈安利这里
#include<bits/stdc++.h>
#define LL long long
#define db double
#define il inline
#define pb push_back
#define mk make_pair
#define ft first
#define sc second
using namespace std;
const int N=200000+10,mod=1e9+7;
il LL rd()
{
LL x=0,w=1;char ch=0;
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
int n,k,sm,fac[N],iac[N],inv[N];
LL fpow(int a,int b){int an=1;while(b){if(b&1) an=1ll*an*a%mod;a=1ll*a*a%mod,b>>=1;} return an;}
LL C(int n,int m){return m<0||n<m?0:1ll*fac[n]*iac[m]%mod*iac[n-m]%mod;}
LL S(int n,int m)
{
LL an=0;
for(int i=0;i<=m;++i)
{
int x=1ll*C(m,i)*fpow(m-i,n)%mod;
an=(an+((i&1)?mod-x:x))%mod;
}
return 1ll*an*iac[m]%mod;
}
int main()
{
n=rd(),k=rd();
for(int i=1;i<=n;++i) sm=(sm+rd())%mod;
fac[0]=1;
for(int i=1;i<=n;++i) fac[i]=1ll*fac[i-1]*i%mod;
iac[n]=fpow(fac[n],mod-2);
for(int i=n;i;--i) iac[i-1]=1ll*iac[i]*i%mod;
cout<<1ll*(S(n,k)+1ll*S(n-1,k)*(n-1)%mod)%mod*sm%mod;
return 0;
}
CF961G Partitions的更多相关文章
- CF961G Partitions(第二类斯特林数)
题目 CF961G 前置 斯特林数\(\Longrightarrow\)斯特林数及反演总结 做法 相信大家能得出一个一眼式:\[Ans=\sum\limits_{i=1}^n w_i\sum\limi ...
- CF961G Partitions(第二类斯特林数)
传送门 对于每一个元素,我们只要能求出它的出现次数\(sum\),那么每个元素的贡献都是一样的,最终的答案为\(sum\times \sum_{i=1}^n w_i\) 那么分别讨论 如果这个元素自己 ...
- 题解 [CF961G] Partitions
题面 解析 首先我们观察这个定义, 可以发现每个元素在统计答案时是平等的, 也就是单个元素的权值对答案没有特别的影响. 设元素权值为\(w[i]\), 那么我们就可以知道答案是\(\sum_{i=1} ...
- FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅱ
因为垃圾电脑太卡了就重开了一个... 前传:多项式Ⅰ u1s1 我预感还会有Ⅲ 多项式基础操作: 例题: 26. CF438E The Child and Binary Tree 感觉这题作为第一题还 ...
- 【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】G. Partitions(组合意义+第二类斯特林数)
传送门 题意: 给出\(n\)个元素,每个元素有价值\(w_i\).现在要对这\(n\)个元素进行划分,共划分为\(k\)组.每一组的价值为\(|S|\sum_{i=0}^{|S|}w_i\). 最后 ...
- 题解 CF961G 【Partitions】
题目传送门 题目大意 给出\(n,k\),以及\(w_{1,2,..,n}\),定义一个集合\(S\)的权值\(W(S)=|S|\sum_{x\in S} w_x\),定义一个划分\(R\)的权值为\ ...
- 【CodeForces】961 G. Partitions 斯特林数
[题目]G. Partitions [题意]n个数$w_i$,每个非空子集S的价值是$W(S)=|S|\sum_{i\in S}w_i$,一种划分方案的价值是所有非空子集的价值和,求所有划分成k个非空 ...
随机推荐
- C# http请求带请求头部分
直接上代码 前台调用: <script type="text/javascript"> function zLoginCheck() { var Account = ' ...
- PHP开发APP接口之返回数据
首先说明一下客户端APP通信的格式 1.xml:扩展标记语言(1.用来标记数据,定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言,xml格式统一,跨平台和语言,非常适合数据传输和通信,早已 ...
- java练习:质数,匿名内部类创建接口,抽象类派生子类,画圆,字节截取字符串,数字变钱币,五子棋,梭哈
java学习-质数的孤独 正在看质数的孤独,,,于是写了一个练习代码,输出1-100之间的质数 代码比较烂.待完善吧. 这里用到了continue和break,continue指结束当前轮次循环,跳入 ...
- (二叉树 bfs) leetcode 199. Binary Tree Right Side View
Given a binary tree, imagine yourself standing on the right side of it, return the values of the nod ...
- 8个Python小Tips
原创: 金牌小编 行走在Python的江湖,那能不收藏一些锦囊妙计,今天分享给大家8个小技巧,希望在实战的时候有帮助! 01. 条件判断 condition=Trueif condition: ...
- bzoj2957 奥妙重重的线段树
https://www.lydsy.com/JudgeOnline/problem.php?id=2957 线段树的query和update竟然还可以结合起来用! 题意:小A的楼房外有一大片施工工地, ...
- 图论分支-差分约束-SPFA系统
据说差分约束有很多种,但是我学过的只有SPFA求差分: 我们知道,例如 A-B<=C,那么这就是一个差分约束. 比如说,著名的三角形差分约束,这个大家都是知道的,什么两边之差小于第三边啦,等等等 ...
- js截取url地址后面的文件名
let url = response.data.stuXscg[0].fj let num = url.lastIndexOf('/')+1 let name = url.substring(num) ...
- Dubbo简易控制中心安装
1. zookeeper安装(单机版):http://www.cnblogs.com/wangfajun/p/5251159.html √ 2. dubbo管控台安装(zookeeper单机版):h ...
- Linux学习笔记:【004】Linux内核代码风格
Chinese translated version of Documentation/CodingStyle If you have any comment or update to the c ...