推不动式子

我们考虑每一个$w_i$对答案的贡献,因为题目中定义集合的价值为$W(S) = \left | S \right |\sum_{x \in S}w_x$,这个系数$\left | S \right |$可以看作集合中所有的元素(包括$i$自己)对$i$产生了一次贡献,那么我们考虑一个元素$j$对$i$的贡献:

1、$j == i$的时候,相当于求把$n$个小球放到$k$个盒子里面的方案数,为$S(n, k)$($S$表示第二类斯特林数)。

2、$j \neq i$的时候,只有$j$和$i$放在同一个集合里面才能产生贡献,为$S(n - 1, k)$。

然后代入第二类斯特林数的通项公式直接算就好了。

最后的答案就是

$$(S(n, k) + (n - 1)S(n - 1, k)) * \sum_{i = 1}^{n}w_i$$

时间复杂度$O(klogk)$。

另外一种高能的推法:传送门

Code:

#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll; const int N = 2e5 + ;
const ll P = 1e9 + ; ll sum = , fac[N], inv[N]; inline ll fpow(ll x, ll y) {
ll res = 1LL;
for (; y > ; y >>= ) {
if (y & ) res = res * x % P;
x = x * x % P;
}
return res;
} inline ll getS(int n, int k) {
ll res = ;
for (int i = ; i <= k; i++) {
ll opt = i & ? -1LL : 1LL;
res = (res + opt * inv[i] % P * fpow(k - i, n) % P * inv[k - i] % P + P) % P;
}
return res;
} int main() {
int n, k;
scanf("%d%d", &n, &k);
for (int i = ; i <= n; i++) {
ll now; scanf("%lld", &now);
sum = (sum + now) % P;
} fac[] = ;
for (int i = ; i <= n; i++) fac[i] = fac[i - ] * i % P;
inv[n] = fpow(fac[n], P - );
for (int i = n - ; i >= ; i--) inv[i] = inv[i + ] * (i + ) % P; ll ans = (getS(n, k) + (n - ) * getS(n - , k) % P) % P;
ans = ans * sum % P;
printf("%lld\n", ans); return ;
}

最新文章

  1. 理解python的with语句
  2. matplotlib画图保存
  3. SQL注入技术专题—由浅入深【精华聚合贴】
  4. 原来现在很多人都用SignalR来实现Chat Room
  5. opencv+树莓PI的基于HOG特征的行人检测
  6. windows加固方案
  7. AngularJS概念概述和第一个使用例子
  8. 微信公众号开发(三)获取access_token
  9. Day1:html和css
  10. Codeforces.566E.Restoring Map(构造)
  11. Centos7下chkconfig设置MySql自动启动
  12. 2018-2019-2 网络对抗技术 20165230 Exp4 恶意代码分析
  13. 前端面试题 | JS部分(附带答案)
  14. php基础-1
  15. zabbix的日常监控-自动化监控(十一)
  16. MySQL笔记(三)之数据插入更新与删除
  17. SCOJ 4423: Necklace polya
  18. P1018 乘积最大(高精度加/乘)
  19. Python单例模式的四种方法
  20. Leetcode 之Largest Rectangle in Histogram(40)

热门文章

  1. 重装Oracle时出现SID已存在问题的解决办法
  2. 【JVM】JVM参数说明和分析
  3. eclipse share project到svn时显示不被信任的证书,暂时接受也不行
  4. SharePoint 创建列表并使用Windows Presentation Foundation应用程序管理列表
  5. 【Swift】- UITextField完成输入后关闭软键盘的几种方法
  6. as3 htmlText 的bug
  7. (转)Download interrupted: Connection to https://dl-ssl.google.com refused
  8. css中伪类和伪元素的区别
  9. ubuntu14.04安装python3.7.1
  10. jinja2的一些用法