【问题描述】

【输入格式】

【输出格式】

【样例输入】

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的更多相关文章

  1. bzoj1272 Gate Of Babylon(计数方法+Lucas定理+乘法逆元)

    Description Input Output Sample Input 2 1 10 13 3 Sample Output 12 Source 看到t很小,想到用容斥原理,推一下发现n种数中选m个 ...

  2. BZOJ1272: [BeiJingWc2008]Gate Of Babylon

    题解: 多重集合的组合数?还是0-m?有些元素有个数限制? 多重集合的组合数可以插板法,0-m直接利用组合数的公式一遍求出来,个数限制注意到只有15个,那我们就暴力容斥了 AC了真舒畅.. 注意开lo ...

  3. 【BZOJ1272】Gate Of Babylon [Lucas][组合数][逆元]

    Gate Of Babylon Time Limit: 10 Sec  Memory Limit: 162 MB[Submit][Status][Discuss] Description Input ...

  4. Gate Of Babylon bzoj 1272

    Gate Of Babylon (1s 128MB) babylon [问题描述] [输入格式] [输出格式] [样例输入] 2 1 10 13 3 [样例输出] 12 [样例说明] [数据范围] 题 ...

  5. 【BZOJ】【1272】【BeiJingWC2008】Gate of Babylon

    组合数学+容斥原理 Orz zyf-zyf 多重集组合数0.0还带个数限制?  ——>  <组合数学>第6章  6.2带重复的组合 组合数还要模P 0.0? ——> Lucas ...

  6. 【BZOJ 1272】 1272: [BeiJingWc2008]Gate Of Babylon (容斥原理+卢卡斯定理)

    1272: [BeiJingWc2008]Gate Of Babylon Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 254  Solved: 12 ...

  7. bzoj 1272: [BeiJingWc2008]Gate Of Babylon

    Description Solution 如果没有限制,答案就是 \(\sum_{i=0}^{m}C(n+i-1,i)\) 表示枚举每一次取的个数,且不超过 \(m\),方案数为可重组合 发现这个东西 ...

  8. ●BZOJ 1272 [BeiJingWc2008]Gate Of Babylon

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1272 题解: 容斥,Lucas定理本题的容斥考虑类似 [BZOJ 1042 [HAOI200 ...

  9. Gate Of Babylon(bzoj 1272)

    Description Input Output Sample Input Sample Output 12 HINT /* 容斥+lucas+乘法逆元 首先,看到有限制的只有15个,因此可以用容斥原 ...

随机推荐

  1. Beta预备

    团队名称:稳住!我们能赢 Beta预备: 讨论组长是否重选的议题和结论 项目组长可以说是一个团队的灵魂和核心.一个好的领导者可以激发团队成员的工作热情,提高开发效率,保质保量的完成工作.虽然在Alph ...

  2. 团队作业4——第一次项目冲刺(Alpha版本) Day 2

    小队@JMUZJB-集美震惊部 一.Daily Scrum Meeting照片 二.Burndown Chart 燃尽图 三.项目进展 成员 工作 丘雨晨 环境配置 刘向东 数据库搭建,环境配置 江泽 ...

  3. 201621123044《JAVA程序设计》第一周学习总结

    1. 本周学习总结 1.了解了JAVA的诞生以及发展历史简介.JAVA语言的特点,以及JAVA的电脑安装以及环境配置. 2.JAVA不仅可以用eclipse进行编写,也可以在记事本和notepad++ ...

  4. bzoj 2962 序列操作

    2962: 序列操作 Time Limit: 50 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 有一个长度为n的序列, ...

  5. codevs 3342 绿色通道

    codevs 3342 绿色通道 http://codevs.cn/problem/3342/ 难度等级:黄金 题目描述 Description <思远高考绿色通道>(Green Pass ...

  6. EasyUI内容页Tabs。

    html: <div data-options="region:'center'"> <div id="tabs" class="e ...

  7. 20165226 2017-2018-4 《Java程序设计》第6周学习总结

    20165226 2017-2018-4 <Java程序设计>第6周学习总结 教材学习内容总结 第八章 常用实用类 string类 并置 两个常量进行并置,得到的仍是常量. public ...

  8. 微信接口(一)创建菜单&自动回复

    刚划拉完微信.做一个笔记这里的数据是写死的,还有一份是通过查询数据库进行自动回复,自定义菜单设置的.不过因为使用到数据库,最好在网站后台吧微信平台开发集成进去.所以代码较多就先不放了.有问题的地方请留 ...

  9. kubernetes入门(01)kubernetes是什么?

    一.kubernetes是什么? Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署.大规模可伸缩.应用容器化管理.在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以 ...

  10. python入门(6)输入和输出

    python入门(6)输入和输出 输出 >>> print 'hello, world' >>> print 'The quick brown fox', 'jum ...