题目传送门

题目大意: 有 nnn 个物品,每个物品有一个权值 wiw_iwi​,一个集合的权值为 f(S)=∣S∣∑x∈Swxf(S)=|S|\sum_{x\in S} w_xf(S)=∣S∣∑x∈S​wx​,nnn 件物品的一个划分 RRR 的贡献为 ∑S∈Rf(S)\sum_{S\in R}f(S)∑S∈R​f(S),求所有划分的总贡献。

题解

容易发现一个柿子:
∑i=1nwi∑j=1njCn−1j−1S(n−j,k−1)\sum_{i=1}^n w_i\sum_{j=1}^n jC_{n-1}^{j-1}S(n-j,k-1) i=1∑n​wi​j=1∑n​jCn−1j−1​S(n−j,k−1)

jjj 表示枚举一个物品所在集合的大小,后面一串是计算方案数,其中 SSS 是第二类斯特林数,然后乘上权值就是答案(不难发现每个物品的系数都是一样的)。

看起来求一列斯特林数就可以做完了,但毒瘤的是模数不是 nttnttntt 模数……但似乎巨佬们在这个基础上大力推式子也是能做的。

另一个更简单的办法:原来是考虑一个点所在的集合大小,其实这等价于考虑别的点对自己的贡献(即和自己在同一个集合的方案数),自己对自己的贡献显然是 S(n,k)S(n,k)S(n,k),别的点对自己的贡献是 (n−1)S(n−1,k−1)(n-1)S(n-1,k-1)(n−1)S(n−1,k−1)。

而 S(n,k)S(n,k)S(n,k) 有一个经典的 O(n)O(n)O(n) 容斥求法,这个应该比较众所周知这里就不讲了,代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define maxn 200010
#define mod 1000000007int n,k,val;
int fac[maxn],inv[maxn],inv_fac[maxn];
void FacInit(){fac[0]=inv_fac[0]=inv[1]=1;for(int i=1;i<=n;i++)fac[i]=1ll*fac[i-1]*i%mod;for(int i=2;i<=n;i++)inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;for(int i=1;i<=n;i++)inv_fac[i]=1ll*inv_fac[i-1]*inv[i]%mod;
}
int C(int x,int y){return 1ll*fac[x]*inv_fac[y]%mod*inv_fac[x-y]%mod;}
int ksm(int x,int y){int re=1;for(;(y&1?re=1ll*re*x%mod:0),y;y>>=1,x=1ll*x*x%mod);return re;}
int calcS(int x,int y){int re=0;for(int i=0;i<y;i++){re+=1ll*(i&1?-1:1)*C(y,i)*ksm(y-i,x)%mod;re%=mod;re=(re+mod)%mod;}re=1ll*re*inv_fac[y]%mod;return re;
}int main()
{scanf("%d %d",&n,&k);FacInit();for(int i=1,x;i<=n;i++)scanf("%d",&x),val=(val+x)%mod;printf("%lld",1ll*val*(calcS(n,k)+1ll*(n-1)*calcS(n-1,k)%mod)%mod);
}

CodeForces 961G Partitions 题解相关推荐

  1. c语言1106回文数,Codeforces 1106 简要题解

    A题 传送门 读错题还能过样例我给自己点个赞. 题意简述:给一个010101网格SSS,问满足Si,j=Si+1,j+1=Si+1,j−1=Si−1,j−1=Si−1,j+1S_{i,j}=S_{i+ ...

  2. Educational Codeforces Round 95题解

    Educational Codeforces Round 95题解 题目链接 代码链接 A. Buying Torches 题目大意: 你手上现在有一个木棍.有以下两种交换方式: 1.用一个木棍交换x ...

  3. 【Codeforces div3-498】题解

    Codeforces div3-498题解 A. Adjacent Replacements 对于这道题目就比较简单了,如果该数N为奇数,那么经过变换之后不变,如果该数为偶数则变为N - 1 #inc ...

  4. Codeforces 1110 简要题解

    文章目录 A题 B题 C题 D题 E题 F题 G题 传送门 众所周知ldxoildxoildxoi这种菜鸡选手是不会写HHH题的,因此该篇博客只有AAA题至GGG题的题解,实在抱歉. A题 传送门 题 ...

  5. codeforces 891E Lust 题解

    题目传送门 题目大意: 给出一个长度为 nnn 的序列,进行 kkk 次操作,每次随机选取一个 aia_iai​,让答案加上 aaa 序列中的其他数的乘积,然后让 ai−1a_i-1ai​−1,问最后 ...

  6. codeforces round #827题解(完整)

    Problem - A - Codeforces 大致意思就是说给定三个数,判断是否存在一个数是另外两个数之和. #include<bits/stdc++.h> using namespa ...

  7. Codeforces 967 C 题解报告

    一.题目 http://codeforces.com/contest/967/problem/C 二.思路 (一)如果是同一楼层,则直接走过去,不用爬楼梯也不用乘电梯. (二)如果是不同楼层,分别计算 ...

  8. Codeforces 25E Test 题解

    题目传送门 题意 给你三个字符串,问最短同时以这三个字符串为子串的字符串的长度是多少. s 1 , s 2 , s 3 ≤ 1 0 5 s1,s2,s3≤10^{5} s1,s2,s3≤105 题解 ...

  9. Codeforces ECR50 div2题解

    A:签到 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...

  10. Codeforces Round #621题解

    A. CowandHaybalesCow\ and\ HaybalesCow and Haybales 贪心模拟题. #include<iostream> #include<ioma ...

最新文章

  1. saltstack pkg模块用法
  2. (转)WCF教程系列(1)-创建第一个WCF程序
  3. 浅谈XSS攻击的那些事(附常用绕过姿势)
  4. 配置UIAutomator中的ANT环境报不是内部命令与外部命令
  5. 剑指offer 09.用两个栈实现队列
  6. 程序人生:初学者最常问的几个问题
  7. 在宝塔php里留后门,揭秘PHP的一种新型留后门方式
  8. 一场谷歌与苹果的合作:TensorFlow Lite开始支持Core ML
  9. JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)
  10. 运筹优化(十二)--带约束非线性规划(NLP)
  11. unity数组或链表需要空间很大赋值与调用
  12. 创业公司中运营人员的典型一天是怎么度过的?
  13. 一次算法作业hhhhhh
  14. 新零售新模式:完整了解「快闪店」运作
  15. 基于android的个人理财软件 android stu_Android聊天软件开发(基于网易云IM即时通讯)——注册账号(二)...
  16. 2021-09-07体脂秤模块用来做什么?开发八电极体脂秤方案
  17. [转] 给土鳖装上鹰的翅膀和眼睛后会怎么样?
  18. 前端Base64编码(兼容IE8)
  19. IntelliJ IDEA V2022.1版本亮点——改进框架与技术
  20. SafeSignCertReg.exe导致系统工作异常

热门文章

  1. Trapcode Particular 5 - Emitter
  2. yaml-cpp保存标定文件-Node/Emitter
  3. 计算机超级皇冠关键词是什么,搜狗推广服务
  4. 关闭微软cortana
  5. java jks 转pfx_证书pfx转换成jks
  6. 迪士尼电影经过多年的
  7. 善用GOOGLE–从入门到精通
  8. 【seo】seo网站优化过程
  9. vue中用cdn引入优化vender.js大小,和cdn 引入mint-ui的问题
  10. 黎活明8天快速掌握android视频教程--20_采用ContentProvider对外共享数据