Description

Input

Output

Sample Input

Sample Output

12

HINT

/*
容斥+lucas+乘法逆元
首先,看到有限制的只有15个,因此可以用容斥原理:
ans=没有限制的方案-有一个超过限制的方案数+有两个超过限制的方案数-有三个超过限制的方案数.... 对于无限制的方案,从n组数中选m个的方案数为C(n+m-1,m)。
有一个超过限制直接用总数减去(这个的限制+1)就是当前的总数,相当于强制要选限制+1个,其他任意。。。
要求不超过m的方案数,也就是ΣC(n+i-1,i)(0<=i<=m)=C(n+m,m) 然后用lucas定理。
*/
#include<iostream>
#include<cstdio>
#define N 100010
#define lon long long
using namespace std;
lon inv[N],jc1[N],jc2[N],ans;
int n,t,m,mod,b[];
void init(){
inv[]=inv[]=;for(int i=;i<=mod;i++) inv[i]=((mod-mod/i)*inv[mod%i])%mod;
jc1[]=;for(int i=;i<=mod;i++) jc1[i]=(jc1[i-]*i)%mod;
jc2[]=;for(int i=;i<=mod;i++) jc2[i]=(jc2[i-]*inv[i])%mod;
}
lon C(int n,int m){
if(n<m) return ;
if(n>mod||m>mod) return (C(n%mod,m%mod)*C(n/mod,m/mod))%mod;
else return ((jc1[n]*jc2[m])%mod)*jc2[n-m]%mod;
}
void dfs(int now,int x,int w){
if(now>t){
ans=(ans+x*C(m+n-w,m-w))%mod;
return;
}
dfs(now+,-x,w+b[now]+);
dfs(now+,x,w);
}
int main(){
scanf("%d%d%d%d",&n,&t,&m,&mod);
for(int i=;i<=t;i++) scanf("%d",&b[i]);
init();
dfs(,,);
cout<<(ans%mod+mod)%mod;
return ;
}

Gate Of Babylon(bzoj 1272)的更多相关文章

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

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

  2. UVa 437 The Tower of Babylon(经典动态规划)

    传送门 Description Perhaps you have heard of the legend of the Tower of Babylon. Nowadays many details ...

  3. 晨跑(bzoj 1877)

    Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一张学校附近的地图,这张地图中包含N个十 ...

  4. 洛谷 P3159(BZOJ 2668)[CQOI2012]交换棋子

    有一个\(n\)行\(m\)列的黑白棋盘,你每次可以交换两个相邻格子(相邻是指有公共边或公共顶点)中的棋子,最终达到目标状态.要求第\(i\)行第\(j\)列的格子只能参与\(m[i][j]\)次交换 ...

  5. 洛谷P1198 [JSOI2008]最大数(BZOJ.1012 )

    To 洛谷.1198 最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当 ...

  6. SHOI 2007 仙人掌图(BZOJ 1023)

    1023: [SHOI2008]cactus仙人掌图 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2564  Solved: 1062 Descrip ...

  7. 飞镖(bzoj 2335)

    Description 飞镖是在欧洲颇为流行的一项运动.它的镖盘上分为20个扇形区域,分别标有1到20的分值,每个区域中有单倍.双倍和三倍的区域,打中对应的区域会得到分值乘以倍数所对应的分数.例如打中 ...

  8. 海拔(bzoj 2007)

    Description YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域.简单起见,可以将YT市看作一个 正方形,每一个区域也可看作一个正方形.从而,YT城市中包括(n+1) ...

  9. 分裂游戏(bzoj 1188)

    Description 聪聪和睿睿最近迷上了一款叫做分裂的游戏. 该游戏的规则试: 共有 n 个瓶子, 标号为 0,1,2.....n-1, 第 i 个瓶子中装有 p[i]颗巧克力豆,两个人轮流取豆子 ...

随机推荐

  1. Oracle数据库学习(四)

    11.创建表 crate table tab1(f_id number not null,f_a varchar2(7) not null,f_b number(6,2) not null): 主键: ...

  2. Drop it-freecodecamp算法题目

    Drop it 1.要求 丢弃数组(arr)的元素,从左边开始,直到回调函数return true就停止. 第二个参数,func,是一个函数.用来测试数组的第一个元素,如果返回fasle,就从数组中抛 ...

  3. 火狐IE event和target的兼容

    一.event对象 IE 中可以直接使用 window.event 对象,而 FF 中则不可以,解决方法之一如下: var theEvent = window.event || arguments.c ...

  4. ZendFramework-2.4 源代码 - 关于MVC - Model层类图

  5. A1012 The Best Rank (25)(25 分)

    A1012 The Best Rank (25)(25 分) To evaluate the performance of our first year CS majored students, we ...

  6. Linux系统软件包之---Apache

    当前互联网主流web服务说明 静态服务: apache 中小型静态web服务的主流,web服务器中的老大哥 nginx 大型新兴网站静态web服务主流,web服务器中的初生牛犊 lighttpd 静态 ...

  7. Python虚拟机类机制之descriptor(三)

    从slot到descriptor 在Python虚拟机类机制之填充tp_dict(二)这一章的末尾,我们介绍了slot,slot包含了很多关于一个操作的信息,但是很可惜,在tp_dict中,与__ge ...

  8. easyui tree datagrid动态添加表头和表格数据,动态弹出框,修改和删除按钮

    1.要有获取表头的URL和表格的URL 背景:点击树的一个节点,就加载一个表格,这个表格是动态的,表头和表格数据都是动态的 解决方案:需要两个URL,一个是获取表头的URL,一个是获取表格数据的URL ...

  9. SetUnhandledExceptionFilter

    SetUnhandledExceptionFilter 设置未捕获异常处理 通常windows程序长时间运行,会发生各种问题,例如访问异常,内存溢出,堆栈破坏等. 这时候通常希望程序自己能增加处理,而 ...

  10. 免费生成https证书以及配置

    http升级到https需要在nginx的配置中加入证书信息,查询资料后确定生成证书两种方案   第一种:自签名证书,然后开启 CloudFlare 的 CDN 服务   //确定是否安装openss ...