bzoj1272 Gate Of Babylon
【问题描述】

【输入格式】

【输出格式】

【样例输入】
2 1 10 13
3
【样例输出】
12
【样例说明】

【数据范围】

先容斥,考虑枚举哪些条件强制不满足,即直接选出b[i]+1件宝具
假设强制不满足的条件的b[i]+1的和为sum
那么剩下的就是x=m-sum个宝具
我们考虑隔板法,即C(n-1,x+n-1)=C(x,x+n-1)
但是可以小于m,即小于x
那么C(0,n-1)+C(1,n)+C(2,n+1)....+C(x,x+n-1)
根据C(i,j)=C(i-1,j-1)+C(i-1,j)
所以就变成了C(x,x+n)
然后lucas
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long lol;
lol Mod,n,t,m,b[];
lol fac[],ifac[],inv[],ans;
lol lucas(lol x,lol y)
{
if (x<||y<||x>y) return ;
if (x==) return ;
lol xx=x%Mod,yy=y%Mod;
if (xx>yy) return ;
lol s=fac[yy]*ifac[xx]%Mod*ifac[yy-xx]%Mod;
return s*lucas(x/Mod,y/Mod)%Mod;
}
void dfs(lol x,lol sum,lol cnt)
{
if (sum>m) return;
if (x>t)
{
if (cnt&)
ans-=lucas(n,m-sum+n),ans=(ans+Mod)%Mod;
else ans+=lucas(n,m-sum+n),ans%=Mod;
return;
}
dfs(x+,sum+b[x]+,cnt+);
dfs(x+,sum,cnt);
}
int main()
{lol i;
cin>>n>>t>>m>>Mod;
fac[]=;inv[]=;inv[]=;ifac[]=;
for (i=;i<Mod;i++)
fac[i]=fac[i-]*i%Mod;
for (i=;i<Mod;i++)
inv[i]=(Mod-Mod/i)*inv[Mod%i]%Mod;
ifac[]=inv[];
for (i=;i<Mod;i++)
ifac[i]=ifac[i-]*inv[i]%Mod;
for (i=;i<=t;i++)
scanf("%lld",&b[i]);
dfs(,,);
cout<<ans<<endl;
}
bzoj1272 Gate Of Babylon的更多相关文章
- bzoj1272 Gate Of Babylon(计数方法+Lucas定理+乘法逆元)
Description Input Output Sample Input 2 1 10 13 3 Sample Output 12 Source 看到t很小,想到用容斥原理,推一下发现n种数中选m个 ...
- BZOJ1272: [BeiJingWc2008]Gate Of Babylon
题解: 多重集合的组合数?还是0-m?有些元素有个数限制? 多重集合的组合数可以插板法,0-m直接利用组合数的公式一遍求出来,个数限制注意到只有15个,那我们就暴力容斥了 AC了真舒畅.. 注意开lo ...
- 【BZOJ1272】Gate Of Babylon [Lucas][组合数][逆元]
Gate Of Babylon Time Limit: 10 Sec Memory Limit: 162 MB[Submit][Status][Discuss] Description Input ...
- Gate Of Babylon bzoj 1272
Gate Of Babylon (1s 128MB) babylon [问题描述] [输入格式] [输出格式] [样例输入] 2 1 10 13 3 [样例输出] 12 [样例说明] [数据范围] 题 ...
- 【BZOJ】【1272】【BeiJingWC2008】Gate of Babylon
组合数学+容斥原理 Orz zyf-zyf 多重集组合数0.0还带个数限制? ——> <组合数学>第6章 6.2带重复的组合 组合数还要模P 0.0? ——> Lucas ...
- 【BZOJ 1272】 1272: [BeiJingWc2008]Gate Of Babylon (容斥原理+卢卡斯定理)
1272: [BeiJingWc2008]Gate Of Babylon Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 254 Solved: 12 ...
- bzoj 1272: [BeiJingWc2008]Gate Of Babylon
Description Solution 如果没有限制,答案就是 \(\sum_{i=0}^{m}C(n+i-1,i)\) 表示枚举每一次取的个数,且不超过 \(m\),方案数为可重组合 发现这个东西 ...
- ●BZOJ 1272 [BeiJingWc2008]Gate Of Babylon
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1272 题解: 容斥,Lucas定理本题的容斥考虑类似 [BZOJ 1042 [HAOI200 ...
- Gate Of Babylon(bzoj 1272)
Description Input Output Sample Input Sample Output 12 HINT /* 容斥+lucas+乘法逆元 首先,看到有限制的只有15个,因此可以用容斥原 ...
随机推荐
- 四则运算----C++版
一.设计思想 因java中已做过,就是简单的将java中的语句调换为C++的语句. 二.代码 #include<iostream.h> #include<Stdlib.h> v ...
- NO.7 项目需求分析
NO.7 项目需求分析 由于我们组的第一次选题并没有通过,所以我们又重新选择了一个题目--高校学生征信系统. 结合老师的作业要求,我们对该项目进行了详细的需求分析,软件需求规格说明书地址请点击这里.软 ...
- Scapy实现SYN泛洪攻击
一.实验说明 1.实验介绍 本次实验将使用python3版本的Scapy--Scapy3k来实现一个简单的DDos,本次实验分为两节,本节将学习如何使用Scapy3k来实现SYN泛洪攻击. 2.知识点 ...
- AWS中的Internet 网关
nternet 网关是一种横向扩展.支持冗余且高度可用的 VPC 组件,可实现 VPC 中的实例与 Internet 之间的通信.因此它不会对网络流量造成可用性风险或带宽限制. Internet 网关 ...
- 自己动手写CPU(基于FPGA与Verilog)
大三上学期开展了数字系统设计的课程,下学期便要求自己写一个单周期CPU和一个多周期CPU,既然要学,就记录一下学习的过程. CPU--中央处理器,顾名思义,是计算机中最重要的一部分,功能就是周而复始地 ...
- Windows Powershell脚本执行
在cmd下执行powershell进入shell模式: 变量定义:$i = 10 $a = ifconfig | findstr "192" Windows下的命令都可以执行如: ...
- python 人工智能资源推荐
原创 2017-06-05 玄魂工作室 玄魂工作室 我翻了翻我自己曾经看过的书,还是放弃了推荐.原因很简单,我对这个领域并不是很熟悉,我来推荐资源有点误人子弟.so,简单推点其他人建议给我的内容,希望 ...
- URL编码和Base64编码 (转)
我们经常会遇到所谓的URL编码(也叫百分号编码)和Base64编码. 先说一下Bsae64编码.BASE64编码是一种常用的将二进制数据转换为64个可打印字符的编码,常用于在通常处理文本数据 ...
- 用C#(.NET Core) 实现简单工厂和工厂方法模式
本文源自深入浅出设计模式. 只不过我是使用C#/.NET Core实现的例子. 前言 当你看见new这个关键字的时候, 就应该想到它是具体的实现. 这就是一个具体的类, 为了更灵活, 我们应该使用的是 ...
- Apollo单向SSL认证(2)
一.生成ks和ts 二.连接测试 1.配置 2.测试