传送门

生成函数好题。

题意简述:给出n个盒子,第iii个盒子里有mim_imi​颗相同的糖(但不同盒子中的糖不相同),问有多少种选法可以从各盒子中选出数量在[a,b][a,b][a,b]之间的糖果。


思路:先对每个盒子构造出生成函数:1+x2+...+xmi=1−xmi+11−x1+x^2+...+x^{m_i}=\frac{1-x^{m_i+1}}{1-x}1+x2+...+xmi​=1−x1−xmi​+1​

然后把所有盒子的生成函数乘起来:F(x)=∏i=1n(1−xmi+1)(1−x)n=(1+x+x2+...)n∏i=1n(1−xmi+1)F(x)=\frac{\prod_{i=1}^n(1-x^{m_i+1})}{(1-x)^n}=(1+x+x^2+...)^n\prod_{i=1}^n(1-x^{m_i+1})F(x)=(1−x)n∏i=1n​(1−xmi​+1)​=(1+x+x2+...)n∏i=1n​(1−xmi​+1)

这个时候考虑如何统计答案。

直接做很难,因此我们差分一下,转化成求f(b)−f(a−1)f(b)-f(a-1)f(b)−f(a−1),f(x)f(x)f(x)表示选出数量不超过xxx的糖果的方案数。

左边的一坨xmx^mxm的系数看成把mmm拆成nnn个自然数,为Cm+n−1n−1C_{m+n-1}^{n-1}Cm+n−1n−1​

右边的一坨爆搜即可。

然后对于右边搜出来的kxtkx^tkxt,假设当前要求数量不超过mmm,那么这一种组合方式对答案的贡献就是:k∗(Cn−1n−1+Cnn−1+...+Cn+m−1−tn−1)=kCn+m−tnk*(C_{n-1}^{n-1}+C_{n}^{n-1}+...+C_{n+m-1-t}^{n-1})=kC_{n+m-t}^{n}k∗(Cn−1n−1​+Cnn−1​+...+Cn+m−1−tn−1​)=kCn+m−tn​

这样就可以更新答案了。

注意模数的处理

代码:

#include<bits/stdc++.h>
#define ri register int
using namespace std;
typedef long long ll;
const int mod=2004;
int m[12],N,a,b,fac=1,sum=0;
inline int C(int n,int m){
	if(n<m)return 0;
	ll Mod=(ll)mod*fac,ret=1;
	for(ri i=n-m+1;i<=n;++i)ret=(ll)i%Mod*ret%Mod;
	return (ret/fac)%mod;
}
inline void dfs(int dep,int type,int idx,int lim){
	if(dep==N+1){(sum+=type*C(lim+N-idx,N)%mod)%=mod;return;}
	dfs(dep+1,type,idx,lim),dfs(dep+1,-type,idx+m[dep]+1,lim);
}
inline int calc(int lim){return sum=0,dfs(1,1,0,lim),sum;}
int main(){
	scanf("%d%d%d",&N,&a,&b);
	for(ri i=1;i<=N;++i)scanf("%d",&m[i]),fac*=i;
	cout<<((calc(b)-calc(a-1))%mod+mod)%mod;
	return 0;
}

2018.12.30 bzoj3027: [Ceoi2004]Sweet(生成函数+搜索)的更多相关文章

  1. 2018.12.30 bzoj3028: 食物(生成函数)

    传送门 生成函数模板题. 我们直接把每种食物的生成函数列出来: 承德汉堡:1+x2+x4+...=11−x21+x^2+x^4+...=\frac 1{1-x^2}1+x2+x4+...=1−x21​ ...

  2. 2018.12.30 poj3734 Blocks(生成函数)

    传送门 生成函数入门题. 按照题意构造函数: 对于限定必须是出现偶数次的颜色:1+x22!+x44!+...=ex+e−x21+\frac {x^2}{2!}+\frac {x^4}{4!}+...= ...

  3. 2018.12.30【NOIP提高组】模拟赛C组总结

    2018.12.30[NOIP提高组]模拟赛C组总结 今天成功回归开始做比赛 感觉十分良(zhōng)好(chà). 统计数字(count.pas/c/cpp) 字符串的展开(expand.pas/c ...

  4. [BZOJ3027][Ceoi2004]Sweet 容斥+组合数

    3027: [Ceoi2004]Sweet Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 135  Solved: 66[Submit][Status] ...

  5. BZOJ3027 - [CEOI2004]Sweet

    Portal Description 给出\(n(n\leq10),a,b(a,b\leq10^7)\)与\(\{c_n\}(c_i\leq10^6)\),求使得\(\sum_{i=1}^n x_i ...

  6. 2018.12.31 bzoj3771: Triple(生成函数+fft+容斥原理)

    传送门 生成函数经典题. 题意简述:给出nnn个数,可以从中选1/2/31/2/31/2/3个,问所有可能的和对应的方案数. 思路: 令A(x),B(x),C(x)A(x),B(x),C(x)A(x) ...

  7. bzoj 3027 [Ceoi2004] Sweet —— 生成函数

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3027 就是 (1+x+x2+...+xm[i]) 乘起来: 原来想和背包一样做,然而时限很短 ...

  8. 2018.12.30 洛谷P4238 【模板】多项式求逆

    传送门 多项式求逆模板题. 简单讲讲? 多项式求逆 定义: 对于一个多项式A(x)A(x)A(x),如果存在一个多项式B(x)B(x)B(x),满足B(x)B(x)B(x)的次数小于等于A(x)A(x ...

  9. 2018.12.30 Intellij IDEA设置main方法自动补全

    Eclipse与 Intellij IDEA设置方法自动补全 1.首先,点击File-->Settings-->Editor-->Live Templates 设置你想输出的模板 右 ...

随机推荐

  1. TOJ5398: 签到大富翁(简单模拟) and TOJ 5395: 大于中值的边界元素(数组的应用)

    Python代码!!! 5395 传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=53 ...

  2. 我的tensorflow学习1

    1.神经元被分成了多层,层与层之间的神经元有连接,而层内之间的神经元没有连接.最左边的层叫做输入层,这层负责接收输入数据:最右边的层叫输出层,我们可以从这层获取神经网络输出数据.输入层和输出层之间的层 ...

  3. echarts中国地图坐标弹框

    echarts链接:http://gallery.echartsjs.com/editor.html?c=xHkdOlpwWz 代码: var geoCoordMap = { '上海': [121.4 ...

  4. ubuntu下安装mysql及常用操作

    1.可通过ps -ef | grep mysql命令查看系统中是否有安装mysql 如果出现类似上述的页面,就证明是已经安装过了mysql,否则就是没有. 2.安装mysql 很简单,只需要键入如下命 ...

  5. XML 解析技术

    xml 解析方式有两种: dom 解析和 sax 解析: 针对着两种解析方式,有三种解析器: sun公司的 jaxp dom4j 组织的 dom4j jdom 组织的 jdom dom 解析XML : ...

  6. class configured for Signature (provider: BC) cannot be found

    java.security.NoSuchAlgorithmException: class configured for Signature (provider: BC) cannot be foun ...

  7. cmake 添加头文件目录,链接动态、静态库

    罗列一下cmake常用的命令. CMake支持大写.小写.混合大小写的命令. 1. 添加头文件目录INCLUDE_DIRECTORIES 语法: include_directories([AFTER| ...

  8. 进程同步(multiprocess.Lock、multiprocess.Semaphore、multiprocess.Event) day38

    进程同步(multiprocess.Lock.multiprocess.Semaphore.multiprocess.Event) 锁 —— multiprocess.Lock 通过刚刚的学习,我们千 ...

  9. PHP 根据两点的坐标计算之间的距离

    define('PI',3.1415926535898); define('EARTH_RADIUS',6378.137); //计算范围,可以做搜索用户 function GetRange($lat ...

  10. mybatis入门--初识mybatis

    初识mybatis 今天,一起来说说mybits这个框架吧.这是一个持久层的框架.之前叫做ibatis.所以,在它的代码中出现ibatis这个词的时候,不要感到惊讶.不是写错了,它确实就是这个样子的. ...