【CF961G】Partitions

题意:给出n个物品,每个物品有一个权值$w_i$,定义一个集合$S$的权值为$W(S)=|S|\sum\limits_{x\in S} w_x$,定义一个划分的权值为$V(R)=\sum\limits_{S\in R} W(S)$。求将n个物品划分成k个集合的所有方案的权值和。

$n,k\le 2\cdot 10^5,w_i\le 10^9$

题解:第二类斯特林数针是太好用辣!

显然每个物品都是独立的,所以我们只需要处理出每个物品被统计的次数即可,说白了就是求这个式子:

$\sum\limits_{i=1}^niC_{n-1}^{i-1}S_{n-i}^{k-1}$

暴力拆分斯特林数

$\sum\limits_{i=1}^niC_{n-1}^{i-1}S_{n-i}^{k-1}\\=\sum\limits_{i=1}^niC_{n-1}^{i-1}\sum\limits_{j=0}^{k-1}{(-1)^j\over j!}{(k-j-1)^{n-i}\over (k-j-1)!}\\=\sum\limits_{j=0}^{k-1}{(-1)^j\over j!(k-j-1)!}\sum\limits_{i=1}^niC_{n-1}^{i-1}(k-j-1)^{n-i}$

考虑后面那个东西

$\sum\limits_{i=1}^niC_{n-1}^{i-1}(k-j-1)^{n-i}\\=\sum\limits_{i=1}^nC_{n-1}^{i-1}(k-j-1)^{n-i}+\sum\limits_{i=1}^n(i-1)C_{n-1}^{i-1}(k-j-1)^{n-i}\\=\sum\limits_{i=1}^nC_{n-1}^{i-1}(k-j-1)^{n-i}+(n-1)\sum\limits_{i=1}^nC_{n-2}^{i-2}(k-j-1)^{n-i}\\=(k-j)^{n-1}+(n-1)(k-j)^{n-2}$

就完事啦!

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
const ll P=1000000007;
typedef long long ll;
const int maxn=300010;
int n,k;
ll sum,ans;
ll jc[maxn],jcc[maxn],ine[maxn];
inline int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-') f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
inline ll pm(ll x,ll y)
{
if(y<0) return 1;
ll z=1;
while(y)
{
if(y&1) z=z*x%P;
x=x*x%P,y>>=1;
}
return z;
}
int main()
{
n=rd(),k=rd();
int i,j;
for(i=1;i<=n;i++) sum=(sum+rd())%P;
ine[0]=ine[1]=jc[0]=jc[1]=jcc[0]=jcc[1]=1;
for(i=2;i<=n;i++) ine[i]=P-(P/i)*ine[P%i]%P,jc[i]=jc[i-1]*i%P,jcc[i]=jcc[i-1]*ine[i]%P;
for(j=0;j<=k-1;j++)
{
ll tmp=((j&1)?-1:1)*jcc[j]*jcc[k-1-j]%P;
ans=(ans+tmp*pm(k-j,n-2)%P*(k-j+n-1))%P;
}
ans=(ans+P)%P;
printf("%lld",ans*sum%P);
return 0;
}

【CF961G】Partitions 第二类斯特林数的更多相关文章

  1. CF961G Partitions(第二类斯特林数)

    题目 CF961G 前置 斯特林数\(\Longrightarrow\)斯特林数及反演总结 做法 相信大家能得出一个一眼式:\[Ans=\sum\limits_{i=1}^n w_i\sum\limi ...

  2. 【CF961G】Partitions(第二类斯特林数)

    [CF961G]Partitions(第二类斯特林数) 题面 CodeForces 洛谷 题解 考虑每个数的贡献,显然每个数前面贡献的系数都是一样的. 枚举当前数所在的集合大小,所以前面的系数\(p\ ...

  3. CF961G Partitions(第二类斯特林数)

    传送门 对于每一个元素,我们只要能求出它的出现次数\(sum\),那么每个元素的贡献都是一样的,最终的答案为\(sum\times \sum_{i=1}^n w_i\) 那么分别讨论 如果这个元素自己 ...

  4. 【cf961G】G. Partitions(组合意义+第二类斯特林数)

    传送门 题意: 给出\(n\)个元素,每个元素有价值\(w_i\).现在要对这\(n\)个元素进行划分,共划分为\(k\)组.每一组的价值为\(|S|\sum_{i=0}^{|S|}w_i\). 最后 ...

  5. 【BZOJ5093】图的价值(第二类斯特林数,组合数学,NTT)

    [BZOJ5093]图的价值(第二类斯特林数,组合数学,NTT) 题面 BZOJ 题解 单独考虑每一个点的贡献: 因为不知道它连了几条边,所以枚举一下 \[\sum_{i=0}^{n-1}C_{n-1 ...

  6. 【BZOJ4555】求和(第二类斯特林数,组合数学,NTT)

    [BZOJ4555]求和(第二类斯特林数,组合数学,NTT) 题面 BZOJ 题解 推推柿子 \[\sum_{i=0}^n\sum_{j=0}^iS(i,j)·j!·2^j\] \[=\sum_{i= ...

  7. 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 ...

  8. HDU - 4625 JZPTREE(第二类斯特林数+树DP)

    https://vjudge.net/problem/HDU-4625 题意 给出一颗树,边权为1,对于每个结点u,求sigma(dist(u,v)^k). 分析 贴个官方题解 n^k并不好转移,于是 ...

  9. 【CF932E】Team Work(第二类斯特林数)

    [CF932E]Team Work(第二类斯特林数) 题面 洛谷 CF 求\(\sum_{i=1}^nC_{n}^i*i^k\) 题解 寒假的时候被带飞,这题被带着写了一遍.事实上并不难,我们来颓柿子 ...

随机推荐

  1. Aizu2224 Save your cats(最大生成树)

    https://vjudge.net/problem/Aizu-2224 场景嵌入得很好,如果不是再最小生成树专题里,我可能就想不到解法了. 对所有的边(栅栏)求最大生成树,剩下来的长度即解(也就是需 ...

  2. SQL学习1:基础

    SQL 是用于访问和处理数据库的标准的计算机语言. SQL,指结构化查询语言,全称是 Structured Query Language. SQL 能做什么? SQL 面向数据库执行查询 SQL 可从 ...

  3. 阿里云ACE深圳同城会 开始报名

    大家好,阿里云 ACE深圳同城会本周末第一活动,主要大家一起聚聚,互相认识和熟悉,未来一起玩儿一起进步~ 通知大家一个好消息,当前凡是加入深圳ACE同城会组织(群)的朋友,通过跟群主报名申请,将有机会 ...

  4. mysql -- this is incompatible with sql_mode=only_full_group_by

    select @@GLOBAL.sql_mode; set @@GLOBAL.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ER ...

  5. thymeleaf学习笔记

    1.${@dict.hello().fatherName} 显示对象的属性2.${@dict.hello()[0].fatherName} 显示列表对象的属性3.<div th:object=& ...

  6. Javascript数组(一)排序

    一.简介首先,我们来看一下JS中sort()和reverse()这两个函数的函数吧reverse();这个函数是用来进行倒序,这个没有什么可说的,所谓倒序就是大的在前面,小的在后面. 比如: var ...

  7. 用R语言分析与预測员工离职

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/kMD8d5R/article/details/83542978 https://mmbiz.qpic ...

  8. CentOs7 HP找回root密码

    linuxman本人尝试了两种方式修改密码,只有一种成功.现展示如下第一种:成功1. 在启动界面选择  centos linux, with linux***.x86_642. 按 e 键进入编辑模式 ...

  9. golang编译库文件方式

    // as c-shared library $ go build -buildmode=c-shared -o nautilus.a nautilus.go // as c-archive $ go ...

  10. 使用MiniProfiler调试ASP.NET web api项目性能

    本质上,集成Miniprofiler可以分解为三个问题: 怎样监测一个WebApi项目的性能. 将性能分析监测信息从后端发送到UI. 在UI显示分析监测结果. 首先安装Miniprofiler,Min ...