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个,因此可以用容斥原 ...
随机推荐
- ExecutorService,另一种服务,线程
http://heipark.iteye.com/blog/1393847 Executors.newFixedThreadPool和ArrayBlockingQueue一点使用心得 博客 ...
- django搭建web (三) admin.py -- 待续
demo 关于模型myQuestion,myAnswer将在后述博客提及 # -*- coding: utf-8 -*- from __future__ import unicode_literals ...
- iOS 播放音频的几种方法
Phone OS 主要提供以下了几种播放音频的方法: System Sound Services AVAudioPlayer 类 Audio Queue Services OpenAL 1. Syst ...
- 项目Beta冲刺Day4
项目进展 李明皇 今天解决的进度 因服务器端未完成登录态维护,故无法进行前后端联动. 明天安排 前后端联动调试 林翔 今天解决的进度 因上课和实验室事务未完成登录态维护 明天安排 完成登录态维护 孙敏 ...
- R语言基础1
----------------------------------R语言学习与科研应用,科研作图,数据统计挖掘分析,群:719954246-------------------------- 我们将 ...
- 更优雅的方式: JavaScript 中顺序执行异步函数
火于异步 1995年,当时最流行的浏览器--网景中开始运行 JavaScript (最初称为 LiveScript). 1996年,微软发布了 JScript 兼容 JavaScript.随着网景.微 ...
- JAVA_SE基础——8.基本数据类型
基本数据类型有:整数类型.浮点类型.字符类型.布尔类型 整数类型 整数类型用来存储整数数值,即没有小数部分的数值.与C.C++语言相同,整数在Java语言中有3种表示形式:十进制.八进制和十六进制. ...
- mysql常用命令整理
#不压缩备份 mysqldump -u root -p userpassword databasename > /tmp/backupfile.sql #压缩备份 mysqldump -u ro ...
- 剑指offer-数据流中的中位数
题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值. ...
- python 内置函数之lambda-filter-reduce-apply-map
(1)lambda lambda是Python中一个很有用的语法,它允许你快速定义单行最小函数.类似于C语言中的宏,可以用在任何需要函数的地方. 基本语法如下: 函数名 = lambda args1, ...