[bzoj4665]小w的喜糖_二项式反演
小w的喜糖
题目链接:https://lydsy.com/JudgeOnline/problem.php?id=4665
数据范围:略。
题解:
二项式反演裸题。
$f_{i,j}$表示,前$i$种钦定$j$拿到自己种类糖果的方案数。
求完了之后可以二项式反演回来即可。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1000000009 ;
int n, m;
ll ans;
int col[2010], s[2010], v[2010];
ll c[2010][2010], f[2010][2010], jc[2010], ine[2010], jcc[2010];
char *p1, *p2, buf[100000];
#define nc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1 ++ )
int rd() {
int x = 0, f = 1;
char c = nc();
while (c < 48) {
if (c == '-')
f = -1;
c = nc();
}
while (c > 47) {
x = (((x << 2) + x) << 1) + (c ^ 48), c = nc();
}
return x * f;
}
int main() {
n = rd();
for (int i = 0; i <= n; i ++ ) {
c[i][0] = 1;
for(int j = 1; j <= i; j ++ ) {
c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % mod;
}
}
jc[0] = ine[0] = jcc[0] = jc[1] = ine[1] = jcc[1] = 1;
for (int i = 2; i <= n; i ++ ) {
jc[i] = (ll)jc[i - 1] * i % mod;
ine[i] = mod - (mod / i) * ine[mod % i] % mod;
jcc[i] = (ll)jcc[i - 1] * ine[i] % mod;
}
for (int i = 1; i <= n; i ++ ) {
col[i] = rd();
}
sort(col + 1, col + n + 1);
for (int i = 1; i <= n; i ++ ) {
if (col[i] > col[i - 1]) {
m ++ ;
}
v[m] ++ ;
}
for(int i = 1; i <= m; i ++ ) {
s[i] = s[i - 1] + v[i];
}
f[0][0] = 1;
for (int i = 1; i <= m; i ++ ) {
for (int j = 0; j <= s[i - 1]; j ++ ) {
for (int k = 0; k <= v[i]; k ++ ) {
f[i][j + k] = (f[i][j + k] + (ll)f[i-1][j] * c[v[i]][k] % mod * jc[v[i]] % mod * jcc[v[i] - k] % mod) % mod;
}
}
}
for (int i = 0; i <= n; i ++ ) {
ans = (ans + (ll)((i & 1) ? -1 : 1) * f[m][i] * jc[n - i] + mod) % mod;
}
for (int i = 1; i <= m; i ++ ) {
ans = (ll)ans * jcc[v[i]] % mod;
}
cout << ans << endl ;
return 0;
}
[bzoj4665]小w的喜糖_二项式反演的更多相关文章
- bzoj4665小w的喜糖 dp+容斥
4665: 小w的喜糖 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 120 Solved: 72[Submit][Status][Discuss] ...
- bzoj4665 小w的喜糖(dp+容斥)
4665: 小w的喜糖 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 222 Solved: 130[Submit][Status][Discuss ...
- BZOJ4665: 小w的喜糖 DP
对于这道题,首先每个人的位置并不影响结果 所以我们可以将相同颜色糖果的人放在一块处理 设 $f_{i,j}$ 表示处理到第 $i$ 种糖果至少有 $j$ 人的糖果和原先的类型相同 枚举当前种类中不满足 ...
- BZOJ4665 : 小w的喜糖
考虑枚举哪些人一定不合法,那么方案数可以通过简单的排列组合算出. 于是设$f[i][j]$表示前$i$种糖果,一共有$j$个人一定不合法的方案数,但是这样并不能保证其他人一定合法,所以需要进行容斥. ...
- 【BZOJ4665】小w的喜糖 容斥+组合数
[BZOJ4665]小w的喜糖 Description 废话不多说,反正小w要发喜糖啦!! 小w一共买了n块喜糖,发给了n个人,每个喜糖有一个种类.这时,小w突发奇想,如果这n个人相互交换手中的糖,那 ...
- 小w的喜糖(candy)
小w的喜糖(candy) 题目描述 废话不多说,反正小w要发喜糖啦!! 小w一共买了n块喜糖,发给了n个人,每个喜糖有一个种类.这时,小w突发奇想,如果这n个人相互交换手中的糖,那会有多少种方案使得每 ...
- 【BZOJ 4665】 4665: 小w的喜糖 (DP+容斥)
4665: 小w的喜糖 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 94 Solved: 53 Description 废话不多说,反正小w要发喜 ...
- ●BZOJ 4665 小w的喜糖
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4665 题解: 容斥,dp令 v[i] 表示原来拥有i类糖果的人数. (一个套路,首先把每个糖 ...
- BZOJ 4665: 小w的喜糖
Sol DP+容斥. 这就是一个错排的扩展...可是想到容斥却仅限于种数的容斥,如果种数在一定范围内我就会做了QAQ. 但是容斥的是一定在原来位置的个数. 发现他与原来的位置无关,可以先把每个同种的糖 ...
随机推荐
- CF2B The least round way(贪心+动规)
题目 CF2B The least round way 做法 后面\(0\)的个数,\(2\)和\(5\)是\(10\)分解质因数 则把方格中的每个数分解成\(2\)和\(5\),对\(2\)和\(5 ...
- LG5492 [PKUWC2018]随机算法
题意 有一种贪心求最大独立集的算法: 随机一个排列 按顺序加入独立集,如果一个点能加入,就加入\({S}\) 给出一张图,问得出正确答案的概率. \(n \leq 20\) 传送门 思路 用 \(dp ...
- Android自定义view绘图
一.新建一个视图类,继承自View,重写OnDraw()函数,在函数内绘图 public class myView extends View {//新建一个视图类,继承自View myView(Con ...
- jQuery Cookie (内附 上百行的中文使用手册,与 所有的注释中文翻译)
jQuery Cookie (内附 上百行的中文使用手册,与 所有的注释中文翻译) 博主亲自翻译. 大家多多捧场. 更多资源请点击"查看TA 的资源" .全场通通 2积分. htt ...
- ZR#957
ZR#957 解法: 首先 $ T $ 必须得要是 $ S $ 的子序列,不然不存在好的下标序列,因此一定无解. 考虑判断一个串 $ T $ 是不是 $ S $ 子序列的贪心做法:每次从没有匹配的位置 ...
- 实现一个hoverDelay延迟hover
实现一个hoverDelay延迟hover author: @TiffanysBear 需求背景 经常在页面开发中,需要使用hover事件来触发相应的网络请求或页面DOM元素显示切换,需要考虑的问题就 ...
- 上下文对象-请求对象-响应对象(ServletContext - response - request)
目录 上下文对象-请求对象-响应对象 ServletContext response request 上下文对象-请求对象-响应对象 ServletContext 什么是ServletContext ...
- unittest 的用法
一.discover方法 discover方法可以根据标准加载用例,并将结果返回给测试套件(suite),start_dir:待测试的目录,pattern:测试用例文件名的匹配规. 如: start_ ...
- 在主机上如何构建openwrt的编译环境?
答: 请参考官方文档
- VS下设置dll环境变量目录的方法
项目=>属性=>Debugging PATH=路径