小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;
}

最新文章

  1. SQL Cumulative Sum累积求和
  2. Pyqt QSystemTrayIcon 实现托盘效果
  3. Tree Context Menu
  4. RichEdit 各个版本介绍
  5. 【转】使用vnc连接linux服务器方便hadoop开发调试
  6. Eclipse、MyEclipse优化,提高运行速度
  7. MySQL 架构
  8. java基础(五章)
  9. java中表示二进制、八进制、十进制、十六进制
  10. Android Studio教程06-布局,监听器以及基本控件
  11. python列表的学习笔记
  12. Spring Boot实现文件下载功能
  13. 详解js跨域
  14. Android 架构:Android Jetpack 架构组件的学习和分析
  15. 第十届蓝桥杯2019年C/C++ 大学A组省赛试题
  16. JUC-Condition线程通信
  17. modelsim仿真中Altera库的用法
  18. org.springframework.mail.MailSendException: Failed messages: javax.mail.SendFailedException: Invalid Addresses
  19. ACM数论之旅5---数论四大定理(你怕不怕(☆゚∀゚)老实告诉我)
  20. python 定义类 学习1

热门文章

  1. 《Microsoft Visio 2013 Step by Step.pdf》
  2. TTFB 时间过长
  3. 深入理解WebRTC
  4. CSS 交集选择器和并集选择器
  5. Sollin算法的C++实现 BY gremount
  6. ubuntu dnsmasq
  7. 2018-2019-2 20165312《网络攻防技术》Exp 8 Web基础
  8. docker安装hbase
  9. ubuntu虚拟机安装及vim配置问题(转载)
  10. NLog用法