Portal

Description

给出\(n(n\leq10),a,b(a,b\leq10^7)\)与\(\{c_n\}(c_i\leq10^6)\),求使得\(\sum_{i=1}^n x_i \in[a,b]\)且\(x_i\in[0,c_i]\)的方案数,对\(2004\)取模。

Solution

定义\(f(m)\)表示“将不超过\(m\)个物品放入\(n\)个盒子,且第\(i\)个盒子中的物品数在\([0,c_i]\)范围内”的方案数。原问题就是求\(f(b)-f(a-1)\)。我们进行容斥:

有\(0\)个盒子超出范围=至少有\(0\)个盒子超出范围-至少有\(1\)个盒子超出范围+至少有\(2\)个盒子超出范围-...

因为\(n\leq10\),所以我们可以枚举哪些盒子超出范围,共有\(2^n\)种。接下来我们只需求:将不超过\(m\)个物品放入\(n\)个盒子中,对于其中的\(k\)个盒子\(p_1..p_k\),其中的物品数超过范围的方案数。

我们先向这\(k\)个盒子里分别放入\(c+1\)个物品,然后再将剩下的物品放进\(n\)个盒子。将不超过\(m_0\)个物品放进\(n\)个盒子的方案数为\(\binom{m_0+n}{n}\),也就是将\(m_0\)分成\(n+1\)个非负整数的方案数。如果无法让\(k\)个盒子都超出范围,方案数就为\(0\)。

不过一个组合数对\(2004\)取模很烦。一般来说,如果要模一个不能表示成\(p^q\)的数,需要用中国剩余定理进行展开再用扩展Lucas定理。\(2004=2^2\times 3\times 167\),分别对\(2^2,3,167\)取模再组合起来。不过因为这道题\(n\)很小,所以有一种简单做法:

证明:\(\dfrac{a}{b} \bmod m= \dfrac{a \bmod bm}{b}\)。

设\(\dfrac{a}{b} \bmod m=c\),则有\(\dfrac{a}{b} = k\cdot m+c \Rightarrow a=k\cdot bm +bc\)

所以\(a \bmod bm=bc\),即\(c=\dfrac{a \bmod bm}{b}\)。

对于本题来说,\(\dbinom{m_0+n}{n} \bmod2004=\dfrac{\prod_{i=0}^{n-1}(m_0+n-i) \bmod (2004\cdot n!)}{n!}\),\(O(n)\)暴力计算即可。

时间复杂度\(O(n2^n)\)。

Code

//[CEOI2004]Sweet
#include <cstdio>
typedef long long lint;
lint const H=2004;
int n,a[20];
lint facN;
int C(int a,int b)
{
lint r=1;
for(int i=1;i<=b;i++) r=(r*(a-i+1))%(facN*H);
return r/facN;
}
int dfs(int x,int m,int cnt)
{
if(m<0) return 0;
if(x>n) return ((cnt&1?-1:1)*C(m+n,n)+H)%H;
int r=0;
r+=dfs(x+1,m-a[x]-1,cnt+1);
r+=dfs(x+1,m,cnt);
return r%H;
}
int main()
{
int x,y; scanf("%d%d%d",&n,&x,&y);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
facN=1; for(int i=1;i<=n;i++) facN=facN*i;
int ans=dfs(1,y,0)-dfs(1,x-1,0);
printf("%lld\n",(ans+H+H)%H);
return 0;
}

P.S.

%%%Icefox,%%%Pickupwin

BZOJ3027 - [CEOI2004]Sweet的更多相关文章

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

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

  2. 2018.12.30 bzoj3027: [Ceoi2004]Sweet(生成函数+搜索)

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

  3. 【BZOJ 3027】 3027: [Ceoi2004]Sweet (容斥原理+组合计数)

    3027: [Ceoi2004]Sweet Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 71  Solved: 34 Description John ...

  4. bzoj 3027: [Ceoi2004]Sweet (生成函数)

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=3027. 题目大意:有$n$种数,每种有$C_i$个,问你在这些数中取出$[l,r]$个 ...

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

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3027 化式子到 ( \mul_{i=1}^{n}(1-x^(m[i]+1)) ) / (1- ...

  6. BZOJ 3027: [Ceoi2004]Sweet

    容斥 #include<cstdio> using namespace std; int a,b,n,m[15]; long long ans=0,mod=2004; long long ...

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

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

  8. bzoj 3027: [Ceoi2004]Sweet【生成函数+组合数学】

    首先根据生成函数的套路,这个可以写成: \[ \prod_{i=1}^{n}(1+x^1+x^2+...+x^{c[i]}) \] 然后化简 \[ =\prod_{i=1}^{n}\frac{1-x^ ...

  9. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

随机推荐

  1. oozie.log报提示:org.apache.oozie.service.ServiceException: E0104错误 An Admin needs to install the sharelib with oozie-setup.sh and issue the 'oozie admin' CLI command to update sharelib

    不多说,直接上干货! 问题详情 关于怎么启动oozie,我这里不多赘述. Oozie的详细启动步骤(CDH版本的3节点集群) 然后,我在查看 [hadoop@bigdatamaster logs]$ ...

  2. LeetCode 69 题

    1.题目要求 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出 ...

  3. js dom node.children与node.childNodes区别

    不同点:node.children不会取到节点下面的TextNode但是node.childNodes会取到 共同点:两者都是集合类数组,可以通过索引的方式取到值也可以用for循环遍历

  4. 伟景行 citymaker 从入门到精通系列

    伟景行 citymaker 从入门到精通(1)——js开发,最基本demo,加载cep工程文件 伟景行 citymaker 从入门到精通(2)——工程图层树加载   伟景行 citymaker 从入门 ...

  5. 【HEVC简介】ALF-Adative Loop Filter

    由于HEVC在HM4.0之后,就把ALF去掉,所以ALF的介绍是基于AVS2. <HEVC标准介绍.HEVC帧间预测论文笔记>系列博客,目录见:http://www.cnblogs.com ...

  6. Es6里面的解析结构

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  7. android和IOS长连接区别

    http://blog.csdn.net/zhangzeyuaaa/article/details/39028369 首先我们必须知道,所有的推送功能必须有一个客户端和服务器的长连接,因为推送是由服务 ...

  8. 北京区域赛I题,Uva7676,A Boring Problem,前缀和差分

    转载自https://blog.csdn.net/weixin_37517391/article/details/83821752 题解 其实这题不难,只要想到了前缀和差分就基本OK了. 我们要求的是 ...

  9. [整理] webpack+vuecli打包生成资源相对引用路径与背景图片的正确引用

    webpack+vuecli打包生成资源相对引用路径与背景图片的正确引用 https://www.cnblogs.com/moqiutao/p/7496718.html

  10. selective_search_rcnn.m中代码

    im = imresize(im, [NaN im_width]):把图像转换为宽度为im_width,自动计算列数