bzoj 3027: [Ceoi2004]Sweet (生成函数)
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=3027。
题目大意:有$n$种数,每种有$C_i$个,问你在这些数中取出$[l,r]$个,问你有多少种不同的取法,答案对2004取模。
数据范围:$n≤10$,$C_i≤10^6$,$1≤l<r≤10^7$。
我们不妨设$f(n)$表示不超过$n$的数的取法之和。
则答案显然为$f(r)-f(l-1)$,下面来推导f(x)。
显然,$f(m)$等于多项式$\Pi_{i=1}^{n} \sum_{j=1}^{C_i}x^i$[0,m]的系数和。
考虑到$C_i$很大,如果直接多项式乘法,会$T$,必须化简。
原式
$=\Pi_{i=1}^n \frac{1-x^{C_i} } {1-x}$。
$=\frac{\Pi_{i=1}^{n} (1-x^{C_i})}{(1-x)^n}$。
$=\Pi_{i=1}^{n} (1-x^{C_i}) \sum_{j=-1}^{\infty} \binom{n+j}{n-1}x^(j+1)$
考虑式子的前半部分,不难发现,该部分最多只有$2^n$个位置是非零的,显然我们只需要处理这部分,并不需要对整个多项式做乘法。实现该步骤一个dfs即可。
对于后半部分,假设求f(m)过程中前面通过dfs连乘出的单项式次数为k,系数为p,那么需要累加的答案显然多项式$p \times \sum_{j=-1}^{m-k-1} \binom{n+j}{n-1}x^(j+1)$。
然后根据组合数的相关公式进行化简,得到$p \times \binom{n+m-k-1}{n-1}$。
然后就愉快地昨晚啦
#include<bits/stdc++.h>
#define L long long
#define MOD 2004
using namespace std; L n,a,b,now,ans=;
L m[]={},mul=; L C(int n,int m){
if(n<m) return ;
L ans=,mod=mul*MOD;
for(L i=n-m+;i<=n;i++)
ans=i%mod*ans%mod;
return (ans/mul)%MOD;
} void dfs(L dep,L fu,L mi,L lim){
if(dep==n+){
now=(now+fu*C(n+lim-mi,n)%MOD)%MOD;
return;
}
dfs(dep+,fu,mi,lim);
dfs(dep+,-fu,mi+m[dep]+,lim);
}
L calc(L hh){
now=;
dfs(,,,hh);
return now;
}
int main(){
cin>>n>>a>>b;
mul=; for(int i=;i<=n;i++) mul*=i;
for(int i=;i<=n;i++) cin>>m[i];
ans=((calc(b)-calc(a-))%MOD+MOD)%MOD;
cout<<ans<<endl;
}
bzoj 3027: [Ceoi2004]Sweet (生成函数)的更多相关文章
- bzoj 3027 [Ceoi2004]Sweet——生成函数
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3027 化式子到 ( \mul_{i=1}^{n}(1-x^(m[i]+1)) ) / (1- ...
- bzoj 3027 [Ceoi2004] Sweet —— 生成函数
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3027 就是 (1+x+x2+...+xm[i]) 乘起来: 原来想和背包一样做,然而时限很短 ...
- bzoj 3027: [Ceoi2004]Sweet【生成函数+组合数学】
首先根据生成函数的套路,这个可以写成: \[ \prod_{i=1}^{n}(1+x^1+x^2+...+x^{c[i]}) \] 然后化简 \[ =\prod_{i=1}^{n}\frac{1-x^ ...
- BZOJ 3027: [Ceoi2004]Sweet
容斥 #include<cstdio> using namespace std; int a,b,n,m[15]; long long ans=0,mod=2004; long long ...
- 【BZOJ 3027】 3027: [Ceoi2004]Sweet (容斥原理+组合计数)
3027: [Ceoi2004]Sweet Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 71 Solved: 34 Description John ...
- [BZOJ3027][Ceoi2004]Sweet 容斥+组合数
3027: [Ceoi2004]Sweet Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 135 Solved: 66[Submit][Status] ...
- 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 ...
- 2018.12.30 bzoj3027: [Ceoi2004]Sweet(生成函数+搜索)
传送门 生成函数好题. 题意简述:给出n个盒子,第iii个盒子里有mim_imi颗相同的糖(但不同盒子中的糖不相同),问有多少种选法可以从各盒子中选出数量在[a,b][a,b][a,b]之间的糖果. ...
- BZOJ 3027 Sweets 生成函数,容斥
Description John得到了n罐糖果.不同的糖果罐,糖果的种类不同(即同一个糖果罐里的糖果种类是相同的,不同的糖果罐里的糖果的种类是不同的).第i个糖果罐里有 mi个糖果.John决定吃掉一 ...
随机推荐
- jQuery使用大全
我的程序人生 提供基于Lesktop的IM二次开发,联系QQ:76159179 CnBlogs Home New Post Contact Admin Rss Posts - 476 Article ...
- Part 2 - Fundamentals(4-10)
https://simpleisbetterthancomplex.com/series/2017/09/11/a-complete-beginners-guide-to-django-part-2. ...
- newton法分形图
方程:z^6-1=0; %f为求解的方程,df是导数,使用的时候用funchandler定义 %res是目标分辨率,iter是循环次数,(xc,yc)是图像的中心,xoom是放大倍数 %参数视自己需求 ...
- IntelliJ IDEA 2017版 导入项目项目名称为红色
1.导入的项目全部是红色的,原因是版本控制问题,所以修改如下:(File--->settings) 2.找到如图位置的字样,选中当前项目,选择铅笔位置 选择铅笔 弹出对话框(默认选择的是proj ...
- 用python实现各种排序算法
最简单的排序有三种:插入排序,选择排序和冒泡排序.它们的平均时间复杂度均为O(n^2),在这里对原理就不加赘述了. 贴出源代码: 插入排序: def insertion_sort(sort_list) ...
- webuploader 文件上传总结
$(function() { /** * 初始化Web Uploader */ var uploader = WebUploader.create({ swf : '../mobile/Uploade ...
- 几个经典的数学库之一学习---VCGlib(3)
Camera and shot abstraction for managing views 视图的定义,以及mesh的操作说明. Shot(镜头) and camera(相机) shot摄像结构以及 ...
- PHP编译安装完成之后没有'php.ini'文件的处理方法
在我们编译安装PHP的时候,编译安装完成是不会自动生成php.ini文件的,所以需要我们手动生成. 1.通过命令行确定php.ini文件的位置 php -r "phpinfo();" ...
- 阿里巴巴集团2013实习生招聘技术类笔试卷(B)
一.单选题 1.在常用的网络协议中,___是面向连接的.有重传功能的协议. A.IP B.TCP C.UDP D.DXP 2.500张多米诺骨牌整齐地排成一列,依顺序编号为1.2.3… ...
- [.net]基元线程同步构造
/* 基元线程同步构造 用户模式构造: 易变构造(Volatile Construct) 互锁构造(Interlocked Construct):自旋锁(Spinlock) 乐观锁(Optimisti ...