CF 961G Partitions
2024-09-24 23:26:36
推不动式子
我们考虑每一个$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 ;
}
最新文章
- 理解python的with语句
- matplotlib画图保存
- SQL注入技术专题—由浅入深【精华聚合贴】
- 原来现在很多人都用SignalR来实现Chat Room
- opencv+树莓PI的基于HOG特征的行人检测
- windows加固方案
- AngularJS概念概述和第一个使用例子
- 微信公众号开发(三)获取access_token
- Day1:html和css
- Codeforces.566E.Restoring Map(构造)
- Centos7下chkconfig设置MySql自动启动
- 2018-2019-2 网络对抗技术 20165230 Exp4 恶意代码分析
- 前端面试题 | JS部分(附带答案)
- php基础-1
- zabbix的日常监控-自动化监控(十一)
- MySQL笔记(三)之数据插入更新与删除
- SCOJ 4423: Necklace polya
- P1018 乘积最大(高精度加/乘)
- Python单例模式的四种方法
- Leetcode 之Largest Rectangle in Histogram(40)
热门文章
- 重装Oracle时出现SID已存在问题的解决办法
- 【JVM】JVM参数说明和分析
- eclipse share project到svn时显示不被信任的证书,暂时接受也不行
- SharePoint 创建列表并使用Windows Presentation Foundation应用程序管理列表
- 【Swift】- UITextField完成输入后关闭软键盘的几种方法
- as3 htmlText 的bug
- (转)Download interrupted: Connection to https://dl-ssl.google.com refused
- css中伪类和伪元素的区别
- ubuntu14.04安装python3.7.1
- jinja2的一些用法