传送门

题意:有$N$种物品,其中$T$个物品有限定数量$B_i$,其他则没有限定。问从中取出不超过$M$个物品的方案数,对质数$P$取模。$N,M \leq 10^9 , T \leq 15 , P \leq 10^5$


在$N$种物品中选出不超过$M$种物品的方案数可以用插板法(插板法只能满足刚好$M$个,那么我们可以虚构出一个数量无限的物品,把剩下的没选择完的都丢给它,这样插板法就能做了)

发现$T$很小,直接容斥。$N,M \leq 10^9$不能直接预处理,考虑到$P$为质数且范围较小,可以使用$Lucas$

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3
 4 inline int read(){
 5     int a = 0;
 6     bool f = 0;
 7     char c = getchar();
 8     while(c != EOF && !isdigit(c)){
 9         if(c == '-')
10             f = 1;
11         c = getchar();
12     }
13     while(c != EOF && isdigit(c)){
14         a = (a << 3) + (a << 1) + (c ^ '0');
15         c = getchar();
16     }
17     return f ? -a : a;
18 }
19
20 const int MAXN = 100000;
21 int N , M , P , Q , jc[MAXN + 10] , ny[MAXN + 10] , B[16] , ans;
22
23 inline int poww(long long a , int b){
24     int times = 1;
25     while(b){
26         if(b & 1)
27             times = times * a % Q;
28         a = a * a % Q;
29         b >>= 1;
30     }
31     return times;
32 }
33
34 inline int C(int N , int M){
35     if(N < 0 || M < 0 || N < M)
36         return 0;
37     return 1ll * jc[N] * ny[M] % Q * ny[N - M] % Q;
38 }
39
40 int lucas(int N , int M){
41     if(N + M == 0)
42         return 1;
43     return 1ll * C(N % Q , M % Q) * lucas(N / Q , M / Q) % Q;
44 }
45
46 void choose(int now , int num , int cnt){
47     if(num < 0)
48         return;
49     if(now > M)
50         ans = (ans + (cnt & 1 ? -1ll : 1ll) * lucas(num + N , N) + Q) % Q;
51     else{
52         choose(now + 1 , num , cnt);
53         choose(now + 1 , num - B[now] - 1 , cnt + 1);
54     }
55 }
56
57 int main(){
58 #ifdef LG
59     freopen("4640.in" , "r" , stdin);
60 #endif
61     N = read();
62     M = read();
63     P = read();
64     Q = read();
65     jc[0] = ny[0] = 1;
66     for(long long i = 1 ; i < Q ; i++)
67         jc[i] = jc[i - 1] * i % Q;
68     ny[Q - 1] = poww(jc[Q - 1] , Q - 2);
69     for(long long i = Q - 2 ; i ; i--)
70         ny[i] = ny[i + 1] * (i + 1) % Q;
71     for(int i = 1 ; i <= M ; i++)
72         B[i] = read();
73     choose(1 , P , 0);
74     cout << ans;
75     return 0;
76 }

转载于:https://www.cnblogs.com/Itst/p/9867615.html

Luogu4640 BJWC2008 王之财宝 容斥、Lucas相关推荐

  1. hdu-5794 A Simple Chess(容斥+lucas+dp)

    题目链接: A Simple Chess Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Ot ...

  2. P4640-[BJWC2008]王之财宝【OGF,Lucas定理】

    正题 题目链接:https://www.luogu.com.cn/problem/P4640 题目大意 nnn种物品,其中ttt种物品是有个数限制的,第iii种限制为bib_ibi​,求选出mmm个物 ...

  3. bzoj3129 [Sdoi2013]方程 容斥+扩展lucas

    调了两天,全是低级错误和脑子问题 对于>=的,直接用m减掉 对于<=的,一开始想枚举减多少,但发现对于每个枚举的值是独立的,所以是1e9的 然后由于>=和<=是两个对立的情况, ...

  4. 【笔记】郑州大学ACM实验室寒假新生培训之 排列组合与容斥

    >>b站视频链接<< 目录: OP 组合数和排列数 组合数与杨辉三角 Lucas定理 容斥原理 错位排序 m球n盒问题 多重集的r-组合数 ED OP \ 组合数和排列数 对于 ...

  5. Leetcode 552.学生出勤记录‖ 动态规划+容斥

    题目链接:传送门 可以用字符串表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤.迟到.到场).记录中只含下面三种字符: 'A':Absent,缺勤 'L':Late,迟到 'P':P ...

  6. 容斥 + 树形dp ---- 2021 icpc 沈阳 L Perfect Matchings

    题目链接 题目大意: 就是给你一个2n2n2n个点的完全图,从这个图里面抽出2n−12n-12n−1条边,这些边形成一颗树,现在问你剩下的图里面点进行完美匹配有多少种方案? 解题思路: 一开始被完美匹 ...

  7. Luogu P4336 [SHOI2016]黑暗前的幻想乡(容斥,矩阵树定理,子集反演)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Luogu P4336 [SHOI2016]黑暗前的幻想乡(容斥,矩阵树定理) Problem n≤1 ...

  8. P3175 [HAOI2015]按位或(Min - Max容斥,FMT,概率期望,全网最清晰的题解!)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://www.luogu.com.cn/problem/P3175 Prob ...

  9. hdu1695(莫比乌斯)或欧拉函数+容斥

    题意:求1-b和1-d之内各选一个数组成数对.问最大公约数为k的数对有多少个,数对是有序的.(b,d,k<=100000) 解法1: 这个能够简化成1-b/k 和1-d/k 的互质有序数对的个数 ...

最新文章

  1. SAP MM 采购单据的屏幕布局配置中字段选择值“$$$$”有什么用处?
  2. Apollo分布式配置中心入门
  3. 使用 cglib_CGLib 动态代理 原理解析
  4. 银盒子扫码下单在线订单开启商品售卖时段使用说明
  5. FastReport的动态页面设置
  6. 【CCNA考试】2010-06-14-河北-936(PASS)
  7. numpy之转置(transpose)和轴对换
  8. 190627每日一句南京创新周;那些绝对不会失败的人,是永远不去尝试的人
  9. java实现socket长连接_java如何实现Socket的长连接和短连接
  10. 生于七十年代的20位最具潜质商业精英
  11. 解决JS双击事件dblclick触发时,同时会执行click事件中的语句
  12. pnpm 是凭什么对 npm 和 yarn 降维打击的
  13. 网络推广优化专员工作职责,网络推广专员工作内容
  14. refers to an unmapped class
  15. CSP 202206-1 归一化处理
  16. HTML如何制作百度首页?代码是什么
  17. python爬虫----简单的抓取斗鱼弹幕
  18. 哔哩哔哩弹幕api及一些解释
  19. word排版之生成目录页码不右对齐
  20. 自学java去哪找工作比较好_自学的java,好找工作吗?

热门文章

  1. JavaScript RegExp(正则)
  2. 分布式存储 CentOS6.5虚拟机环境搭建FastDFS-5.0.5集群
  3. tensorflow单变量线性回归
  4. JAVA在线编译,无需环境变量
  5. tensorflow2 目标检测_一文了解YOLO-v4目标检测
  6. go设置后端启动_使用 Go Wails 框架来构建桌面应用(Go+Vue.js)
  7. Yearn正在评估恢复yDAI池的方式
  8. Vitalik:Rollups预计在短期和中长期成为以太坊扩容的基石
  9. SAP License:ERP系统有哪些?
  10. SAP License:自动创建带内部订单预算管控的在建工程