【问题描述】

【输入格式】

【输出格式】

【样例输入】

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. [福州大学]W班平时成绩排名

    评分链接 个人作业 第一次作业 http://www.cnblogs.com/1qazse4/p/7506448.html 第二次作业 http://www.cnblogs.com/1qazse4/p ...

  2. Beta冲刺第三天

    一.昨天的困难 没有困难. 二.今天进度 1.林洋洋:修改权限相关的资源表示,修复flex布局排版高度问题,修复文件更新问题,去除登录页面的默认账号密码,服务器部署. 2.黄腾达:修复日程首次执行时间 ...

  3. PHP、Java、Python、C、C++ 这几种编程语言都各有什么特点或优点

    PHP.Java.Python.C.C++ 这几种编程语言都各有什么特点或优点 汇编: C: Java: C#: PHP: Python: Go: Haskell: Lisp: C++: &l ...

  4. 第十条:始终要覆盖toString()方法

    Object类提供的toString()方法如下: public String toString() {    return getClass().getName() + "@" ...

  5. 基于Unity·UGUI实现的RecycleList循环列表UI容器

    在UI功能开发实践中,列表UI容器是我们经常使用一种UI容器组件.这种组件就根据输入的数据集合生成对应数据项目.从显示的方向来说,一般就分为水平排布和垂直排布的列表容器两种.列表容器为了在有限的界面空 ...

  6. linux 下 nc 命令的使用

    netcat被誉为网络安全界的'瑞士军刀',一个简单而有用的工具,透过使用TCP或UDP协议的网络连接去读写数据.它被设计成一个稳定的后门工具,能够直接由其它程序和脚本轻松驱动.同时,它也是一个功能强 ...

  7. C语言头文件引用

    1,引用分为两种 firs:include<fileName.h> 引用系统头文件一般用<>. second:include"fileName.h" 引用自 ...

  8. MySQL 避免重复数据的批量插入与批量更新

    [转发] 导读 我们在向数据库里批量插入数据的时候,会遇到要将原有主键或者unique索引所在记录更新的情况,而如果没有主键或者unique索引冲突的时候,直接执行插入操作. 这种情况下,有三种方式执 ...

  9. ajax中设置contentType: “application/json”的作用

    最近在做项目交互的时候,刚开始向后台传递数据返回415,后来百度添加了 contentType:"application/json"之后返回400,然后把传输的数据格式改为json ...

  10. vmvare入门(1)使用移动,不要使用复制

    1.复制虚拟机会产生新的自动网卡,原来的 System Eth0废了? 2.xftp链接的时候,要选择sftp方式连接,utf8编码.