小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的喜糖_二项式反演的更多相关文章

  1. bzoj4665小w的喜糖 dp+容斥

    4665: 小w的喜糖 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 120  Solved: 72[Submit][Status][Discuss] ...

  2. bzoj4665 小w的喜糖(dp+容斥)

    4665: 小w的喜糖 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 222  Solved: 130[Submit][Status][Discuss ...

  3. BZOJ4665: 小w的喜糖 DP

    对于这道题,首先每个人的位置并不影响结果 所以我们可以将相同颜色糖果的人放在一块处理 设 $f_{i,j}$ 表示处理到第 $i$ 种糖果至少有 $j$ 人的糖果和原先的类型相同 枚举当前种类中不满足 ...

  4. BZOJ4665 : 小w的喜糖

    考虑枚举哪些人一定不合法,那么方案数可以通过简单的排列组合算出. 于是设$f[i][j]$表示前$i$种糖果,一共有$j$个人一定不合法的方案数,但是这样并不能保证其他人一定合法,所以需要进行容斥. ...

  5. 【BZOJ4665】小w的喜糖 容斥+组合数

    [BZOJ4665]小w的喜糖 Description 废话不多说,反正小w要发喜糖啦!! 小w一共买了n块喜糖,发给了n个人,每个喜糖有一个种类.这时,小w突发奇想,如果这n个人相互交换手中的糖,那 ...

  6. 小w的喜糖(candy)

    小w的喜糖(candy) 题目描述 废话不多说,反正小w要发喜糖啦!! 小w一共买了n块喜糖,发给了n个人,每个喜糖有一个种类.这时,小w突发奇想,如果这n个人相互交换手中的糖,那会有多少种方案使得每 ...

  7. 【BZOJ 4665】 4665: 小w的喜糖 (DP+容斥)

    4665: 小w的喜糖 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 94  Solved: 53 Description 废话不多说,反正小w要发喜 ...

  8. ●BZOJ 4665 小w的喜糖

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4665 题解: 容斥,dp令 v[i] 表示原来拥有i类糖果的人数. (一个套路,首先把每个糖 ...

  9. BZOJ 4665: 小w的喜糖

    Sol DP+容斥. 这就是一个错排的扩展...可是想到容斥却仅限于种数的容斥,如果种数在一定范围内我就会做了QAQ. 但是容斥的是一定在原来位置的个数. 发现他与原来的位置无关,可以先把每个同种的糖 ...

随机推荐

  1. codeforces626F

    CF626F Group Projects  有n个学生,每个学生有一个能力值ai.现在要把这些学生分成一些(任意数量的)组,每一组的“不和谐度”是该组能力值最大的学生与能力值最小的学生的能力值的差. ...

  2. FOI冬令营 Day4

    目录 T1.循环流(flow) 传送门 Code T2.整除分块(mex) 传送门 Code T3.森林(forest) 传送门 Code 咕咕咕 T1.循环流(flow) 传送门 Code /* 特 ...

  3. 享学课堂java架构vip课程

    1.wps文档地址 https://docs.qq.com/doc/DRVNLUndvTmFSdEhO 2.百度网盘地址 https://pan.baidu.com/s/1uxaTzJZHKrsw_H ...

  4. NAT(地址转换技术)学习

    一.什么是NAT,NAT产生的背景 NAT通常部署在一个组织的网络出口位置,通过将内部网络IP地址替换为出口的IP地址提供公网可达性和上层协议的连接能力. NAT产生的背景是为了解决IPv4地址不足的 ...

  5. 使用INDY解决BASE64回车换行问题

    使用INDY解决BASE64回车换行问题 使用DELPHI EncodeStream(),对流数据进行BASE64编译以后,每隔75个字符,就会添加回车换行符(#$D#$A),这会造成许多问题. 网上 ...

  6. What are the benefits to using anonymous functions instead of named functions for callbacks and parameters in JavaScript event code?

     What are the benefits to using anonymous functions instead of named functions for callbacks and par ...

  7. sql 从服务器取消主从复制

    mysql>change master to master_host='' mysql>stop slave;reset slave;

  8. GDPR全文翻译(二)

    第三节 数据保护影响评估以及事先咨询 第35条 数据保护影响评估 1.鉴于一种数据处理方式,尤其是使用新技术进行数据处理,统筹考虑处理过程的性质.范围.内容和目的,(不难得知)这很可能对自然人权利和自 ...

  9. 关于linux下的系统存储管理

    https://blog.csdn.net/aaaaaab_/article/details/80159871 //查看当前系统磁盘使用空间 df -h //查看当前目录文件占用空间大小 du -sh ...

  10. JAVA_SWT 事件的四种写法

    一:匿名内部类写法 在一个组件下加入以下语句 text.addMouseListener(new MouseAdapter(){ public void mouseDoubleClich(MouseE ...