bzoj 3027: [Ceoi2004]Sweet(母函数+组合数)
3027: [Ceoi2004]Sweet
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 169 Solved: 82
[Submit][Status][Discuss]
Description
John得到了n罐糖果。不同的糖果罐,糖果的种类不同(即同一个糖果罐里的糖果种类是相同的,不同的糖果罐里的糖果的种类是不同的)。第i个糖果罐里有 mi个糖果。John决定吃掉一些糖果,他想吃掉至少a个糖果,但不超过b个。问题是John 无法确定吃多少个糖果和每种糖果各吃几个。有多少种方法可以做这件事呢?
Input
从标准输入读入每罐糖果的数量,整数a到b
John能够选择的吃掉糖果的方法数(满足以上条件)
Output
把结果输出到标准输出(把答案模 2004 输出)
1<=N<=10,0<=a<=b<=10^7,0<=Mi<=10^6
Sample Input
Sample Output
设f[n]表示吃掉刚好n颗糖果的方案数,f[n]的母函数为
设ans[p]表示G[x] 0~p项的系数和,那么本题答案就是ans[b]-ans[a-1]
那么怎么求上面那公式前b项的系数和呢?
因为n其实很小,所以右边连乘可以直接2^n暴力每一项系数,对于当前第p项a[p]*x^p,左半部分要乘的组合数就为
注意模数不是质数,所以可能不存在逆元,一个解决方法是直接将模数先乘上分母(分母最大10!),最后再除掉
#include<stdio.h>
#define LL long long
LL mod, n, p[15], jc[15] = {1};
LL C(LL n, LL m)
{LL i, ans = 1;if(n<m)return 0;for(i=1;i<=m;i++)ans = ans*(n-i+1)%mod;return ans;
}
LL Sech(LL k)
{LL i, j, now, f, ans = 0;for(i=0;i<(1ll<<n);i++){now = 0, f = 1;for(j=0;j<=n-1;j++){if(i&(1ll<<j)){now += p[j+1]+1;f = -f;}}ans = (ans+f*C(n+k-now, n)%mod+mod)%mod;}return ans;
}
int main(void)
{LL a, b, i;mod = 2004;for(i=1;i<=10;i++)jc[i] = jc[i-1]*i;scanf("%lld%lld%lld", &n, &a, &b);mod = mod*jc[n];for(i=1;i<=n;i++)scanf("%lld", &p[i]);printf("%lld\n", (Sech(b)-Sech(a-1)+mod)%mod/jc[n]);return 0;
}
/*
10 13523 463463
123124 23452 457457 123 234 346 23 634 12 5
*/
bzoj 3027: [Ceoi2004]Sweet(母函数+组合数)相关推荐
- #3027. [Ceoi2004]Sweet 生成函数 + 组合数学
传送门 文章目录 题意: 思路: 题意: 思路: 这个题显然可以容斥来写,刚学生成函数就来水一下. 对于每一堆iii我们写出其生成函数Fi(x)=∑k=0mi(1+x+x2+...+xmi)=1−x1 ...
- bzoj 3028: 食物(母函数+广义二项式定理)
3028: 食物 Time Limit: 3 Sec Memory Limit: 128 MB Submit: 717 Solved: 502 [Submit][Status][Discuss] ...
- BZOJ 3027 Sweets 生成函数,容斥
Description John得到了n罐糖果.不同的糖果罐,糖果的种类不同(即同一个糖果罐里的糖果种类是相同的,不同的糖果罐里的糖果的种类是不同的).第i个糖果罐里有 mi个糖果.John决定吃掉一 ...
- 可持久化数据结构讲解
可持久数据结构主要指的是我们可以查询历史版本的情况并支持插入,利用使用之前历史版本的数据结构来减少对空间的消耗(能够对历史进行修改的是函数式). 在这里只讲下比较常用的可持久化线段树和trie. 对于 ...
- BZOJ 3907: 网格( 组合数 + 高精度 )
(0,0)->(n,m)方案数为C(n,n+m), 然后减去不合法的方案. 作(n,m)关于y=x+1的对称点(m-1,n+1), 则(0,0)->(m-1,n+1)的任意一条路径都对应( ...
- BZOJ 4517 组合数+错排
思路: 预处理错排 然后C(n,m)*s[n-m-1]就是答案了 特判n-m-1<0 //By SiriusRen #include <cstdio> using namespace ...
- bzoj 4498: 魔法的碰撞(DP+组合数)
4498: 魔法的碰撞 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 145 Solved: 88 [Submit][Status][Discus ...
- bzoj 1630 2023: [Usaco2005 Nov]Ant Counting 数蚂蚁(有重复元素的组合数)
2023: [Usaco2005 Nov]Ant Counting 数蚂蚁 Time Limit: 4 Sec Memory Limit: 64 MB Submit: 281 Solved: 18 ...
- bzoj 4517: [Sdoi2016]排列计数(错排+组合数逆元)
4517: [Sdoi2016]排列计数 Time Limit: 60 Sec Memory Limit: 128 MB Submit: 1259 Solved: 766 [Submit][Sta ...
最新文章
- 刻意练习:LeetCode实战 -- Task07. 合并两个有序链表
- 软件工程概论冲刺 第6天
- 为什么叫python编程-月薪上万的Python编程,为什么你还没入门就放弃了?
- django xadmin 1不在可用的选项中
- 历届冬奥会举办地与举办时间
- 重磅 | 神策智能运营 2.0 发布!解锁小程序“拉、留、转”新招式
- MySql数据库出现 1396错误
- 关于数据权限的几个问题
- 安卓gridview条目点击事件_敬业签的安卓手机版设置便签按正序排序教程
- struts中几种常用的Action
- rip协议中周期性广播路由信息的报文_关于RIP的一点小笔记--华为
- Linux如何动态查看文件信息,怎么查看linux动态链接库文件的版本等其他信息
- 云南昭通暴雨强度公式_昆明市暴雨强度公式推算与对比
- 华医网自动答题小脚本软件,并收集答案保存起来
- 八个经典的java多线程编程题目
- python 实现串口通信USB转232自闭环、USB转485测试
- Machine Learning with Graphs:Part1
- python 利用opencv实现颜色检测
- C盘容量不足,磁盘满了怎么办
- Allegro Layout常用功能
热门文章
- python 入门基础-Python 如何入门?
- 学python可以做什么职业-Python可以做的5大功能和就职5大高薪职业
- python是干嘛的-python语言是干什么的
- 将语音识别准确率提升40% 他是当下最受比尔·盖茨器重的中国人
- 通过重新训练语音识别来改善iPhone上的嘿Siri | MOS86
- 微信小程序之语音识别(附小程序+服务器源码)
- 【干货】怎样用深度学习做语音识别
- 结构体中操作c语言,C语言中结构体的操作
- php redis hgetall 慢,redis的hGetAll函数的性能问题(记Redis那坑人的HGETALL)
- 【狂神MySQL笔记】初识Mysql