题解-JSOI2011 分特产
题面
有 \(n\) 个不同的盒子和 \(m\) 种不同的球,第 \(i\) 种球有 \(a_i\) 个,用光所有球,求使每个盒子不空的方案数。
数据范围:\(1\le n,m,a_i\le 1000\)。
蒟蒻语
今天做了几道黑题,蒟蒻的做法非常蒟蒻,看上去很厉害其实很废,巨佬的做法是容斥,秒杀一切。
所以蒟蒻拿这道水题讲讲自己的做法。希望巨佬教蒟蒻容斥 \(\tt /kel\)。
蒟蒻解
看到盒子不能空,先二项式反演。
\(f(i)\) 表示 \(i\) 个盒子空,剩下非空的方案数;\(g(i)\) 表示 \(i\) 个盒子空,剩下随意。
\]
然后考虑 \(g(i)\) 怎么求:因为 \(n-i\) 个可以空可以不空,所以可以构造生成函数:
\]
\(g(i)\) 就等于 \(\prod_{j=1}^mx_j^{a_j}\) 的项数。
所以可以每个 \(x_j\) 分开来考虑,用隔板法,得出:
\]
然后答案就是(当 \(x=n\) 时 \(n-x-1=-1\),所以结果为 \(0\),不需要枚举):
\]
代码
跟巨佬的代码是一样的,只不过推导过程不同。
#include <bits/stdc++.h>
using namespace std;
//Start
typedef long long ll;
typedef double db;
#define mp(a,b) make_pair(a,b)
#define x first
#define y second
#define be(a) a.begin()
#define en(a) a.end()
#define sz(a) int((a).size())
#define pb(a) push_back(a)
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
//Data
const int N=1e3,T=N<<1;
const int mod=1e9+7;
int n,m,a[N],c[T+1][T+1];
int g(int x){
int res=c[n][x];
for(int i=0;i<m;i++)
res=(ll)res*c[a[i]+n-x-1][n-x-1]%mod;
return res;
}
//Main
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=0;i<=T;i++){
c[i][0]=c[i][i]=1;
for(int j=1;j<=i-1;j++)
c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
}
for(int i=0;i<m;i++) cin>>a[i];
int ans=0;
for(int i=0;i<n;i++){
if(i&1) (ans+=mod-g(i))%=mod;
else (ans+=g(i))%=mod;
}
cout<<ans<<'\n';
return 0;
}
祝大家学习愉快!
题解-JSOI2011 分特产的更多相关文章
- 【BZOJ4710】[Jsoi2011]分特产 组合数+容斥
[BZOJ4710][Jsoi2011]分特产 Description JYY 带队参加了若干场ACM/ICPC 比赛,带回了许多土特产,要分给实验室的同学们. JYY 想知道,把这些特产分给N 个同 ...
- BZOJ 4710: [Jsoi2011]分特产 [容斥原理]
4710: [Jsoi2011]分特产 题意:m种物品分给n个同学,每个同学至少有一个物品,求方案数 对于每种物品是独立的,就是分成n组可以为空,然后可以用乘法原理合起来 容斥容斥 \[ 每个同学至少 ...
- bzoj4710: [Jsoi2011]分特产 组合+容斥
4710: [Jsoi2011]分特产 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 289 Solved: 198[Submit][Status] ...
- bzoj4710 [Jsoi2011]分特产(容斥)
4710: [Jsoi2011]分特产 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 814 Solved: 527[Submit][Status] ...
- 4710: [Jsoi2011]分特产
4710: [Jsoi2011]分特产 链接 分析: 容斥原理+隔板法. 代码: #include<cstdio> #include<algorithm> #include&l ...
- 【BZOJ 4710】 4710: [Jsoi2011]分特产 (容斥原理)
4710: [Jsoi2011]分特产 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 99 Solved: 65 Description JYY 带 ...
- [BZOJ4710][JSOI2011]分特产(组合数+容斥原理)
4710: [Jsoi2011]分特产 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 395 Solved: 262[Submit][Status] ...
- BZOJ 4710 [Jsoi2011]分特产 解题报告
4710 [Jsoi2011]分特产 题意 给定\(n\)个集合,每个集合有相同的\(a_i\)个元素,不同的集合的元素不同.将所有的元素分给\(m\)个不同位置,要求每个位置至少有一个元素,求分配方 ...
- ●BZOJ 4710 [Jsoi2011]分特产
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4710 题解: 容斥,组合先看看这个方案数的计算:把 M 个相同的东西分给 N 个人,每个人可 ...
随机推荐
- Innodb自增主键与sql_mode
1.自增主键 1.设置自增主键 建表设置自增主键,设置自增主键需要唯一约束,否则会报错.(即指定列数据唯一) mysql> create table test_zz(id int auto_in ...
- fio测试ceph的filestore
前言 fio是一个适应性非常强的软件,基本上能够模拟所有的IO请求,是目前最全面的一款测试软件,之前在看德国电信的一篇分享的时候,里面就提到了,如果需要测试存储性能,尽量只用一款软件,这样从上层测试到 ...
- 彻底卸载MySQL5.7(msi,exe)版
1,停止MySQL服务 2,右键找到任务管理器 3,在程序中卸载MySQL 4,删除MySQL安装目录 有的是在C:\Program Files下,我的是在(X86)下 5,删除隐藏文件中的MySQL ...
- stm32串口的配置方案
最近老板要我去做控制方面的内容,所以买了一块正点原子的开发板,现在是研究了一下usart.c,函数的代码如下: void USART1_IRQHandler(void) { u8 Res; #ifde ...
- Python_爬虫_基础
1.urllib 和 Xpath的区别与联系 from urllib import request from lxml import etree from bs4 import BeautifulS ...
- SQL Server 数据库开启日志CDC记录,导致SQL Server 数据库日志异常增大
这几天单位的SQL Server业务数据生产库出现数据库日志增长迅速,导致最终数据无法写入数据库,业务系统提示"数据库事务日志已满",经过多方咨询和请教,终于将日志异常的数据库处理 ...
- 使用Java将XSL和XML文件输出为HTML(XSL学习笔记二)
XSL 指扩展样式表语言(EXtensible Stylesheet Language),前面一篇博客介绍了使用XSL即可直接将XML输出为HTML片段被浏览器解析,但是这样在web应用中浏览器的解析 ...
- webug第九关:URL跳转
第九关:URL跳转 不太明白,看源码 接受了一个URL的参数
- bWAPP----HTML Injection - Reflected (URL)
HTML Injection - Reflected (URL) 核心代码 1 <div id="main"> 2 3 <h1>HTML Injection ...
- Hadoop大数据平台之Zookeeper搭建
环境:CentOS 7.4 (1708 DVD) 工具:MobaXterm 1. 使用xftp将hadoop上传到/usr/local目录下,将其解压并重命名. 2. 修改环境变量并source. ...