HDU 4869 (递推 组合数取模)
Problem Turn the pokers (HDU 4869)
题目大意
有m张牌,全为正面朝上。进行n次操作,每次可以将任意ai张反面,询问n次操作可能的状态数。
解题分析
记正面朝上为1,朝下为0。
若最后有x个1,则对答案的贡献为C(n,x)。所以只需要知道最后可能的1的个数。
假设已经有a个1,某次操作可以将b张牌反面,可以发现操作之后可能的1的个数相差2。
记录每次操作后1的个数所在区间为[l ,r],即可能取到的个数为l , l+2 , l+4 , ...... , r 。
每次转移分类讨论一下,贪心转移即可。
参考程序
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std; #define N 100008
#define mo 1000000009
int a[N];
int pa[N],pb[N];
int n,m; void calc(int &l,int &r,int x){
int ll,rr;
if (x<l) ll=l-x;
if (l<=x && x<=r) ll=(r-x) & ;
if (r<x) ll=x-r; if (x<m-r) rr=x+r;
if (m-r<=x && x<=m-l) rr=m-((m-l-x) & );
if (m-l<x) rr=m-(x-(m-l));
l=ll; r=rr;
} int C(int x,int y){
return 1ll*pa[x]*pb[y] % mo *pb[x-y] % mo;
} int quick_pow(int x,int y){
int res=;
while (y){
if (y&) res=1ll*res*x % mo;
x=1ll*x*x % mo;
y=y >>;
}
return res;
} int main(){
pa[]=pb[]=;
for (int i=;i<N;i++) pa[i]=(1ll*pa[i-]*i) % mo;
for (int i=;i<N;i++) pb[i]=quick_pow(pa[i],mo-);
while (~scanf("%d %d",&n,&m)){
for (int i=;i<=n;i++) scanf("%d",&a[i]);
int l=,r=;
for (int i=;i<=n;i++) calc(l,r,a[i]); long long ans=;
for (int i=l;i<=r;i+=) ans= (ans+C(m,i)) % mo;
printf("%I64d\n",ans);
}
}
HDU 4869 (递推 组合数取模)的更多相关文章
- cf166e 在四面体上寻找路线数 递推,取模
来源:codeforces E. Tetrahedron You are given a tetrahedron. Let's mark its vertices ...
- 洛谷P4723 【模板】线性递推(多项式取模 线性代数)
题意 题目链接 Sol Orz shadowice 注意,下面的代码自带O(随时TLE)倍大常数.. #include<bits/stdc++.h> #define Pair pair&l ...
- 排列组合+组合数取模 HDU 5894
// 排列组合+组合数取模 HDU 5894 // 题意:n个座位不同,m个人去坐(人是一样的),每个人之间至少相隔k个座位问方案数 // 思路: // 定好m个人 相邻人之间k个座位 剩下就剩n-( ...
- hdu 3944 DP? 组合数取模(Lucas定理+预处理+帕斯卡公式优化)
DP? Problem Description Figure 1 shows the Yang Hui Triangle. We number the row from top to bottom 0 ...
- 组合数取模Lucas定理及快速幂取模
组合数取模就是求的值,根据,和的取值范围不同,采取的方法也不一样. 下面,我们来看常见的两种取值情况(m.n在64位整数型范围内) (1) , 此时较简单,在O(n2)可承受的情况下组合数的计算可以 ...
- Uva12034 (组合数取模)
题意:两匹马比赛有三种比赛结果,n匹马比赛的所有可能结果总数 解法: 设答案是f[n],则假设第一名有i个人,有C(n,i)种可能,接下来还有f(n-i)种可能性,因此答案为 ΣC(n,i)f(n-i ...
- [BZOJ 3129] [Sdoi2013] 方程 【容斥+组合数取模+中国剩余定理】
题目链接:BZOJ - 3129 题目分析 使用隔板法的思想,如果没有任何限制条件,那么方案数就是 C(m - 1, n - 1). 如果有一个限制条件是 xi >= Ai ,那么我们就可以将 ...
- lucas定理解决大组合数取模
LL MyPow(LL a, LL b) { LL ret = ; while (b) { ) ret = ret * a % MOD; a = a * a % MOD; b >>= ; ...
- 2015 ICL, Finals, Div. 1 Ceizenpok’s formula(组合数取模,扩展lucas定理)
J. Ceizenpok’s formula time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
随机推荐
- VS2010中将当前选定项目做为启动项
Visual Studio 2010一个解决方案中多个项目,如果想选择哪个项目就设置哪个项目为启动项可以这么做. 一.对于以后新建的解决方案想这样通过VS设置工具: 二.对于已经存在的解决方案可以这样 ...
- QA16复制_新增查询条件,修改批量使用决策
需求: 增加评估代码,检验类型条件.(检验批中部分检验项目未录结果的检验批显示 注:标准的程序,不支持空结果的查询和使用决策) 1.复制 RQEVAI10 程序 2.因为这是用的QM模块的逻辑数 ...
- 【转】用PowerDesigner对现有的数据库反向工程建立E-R图
转自:http://www.cnblogs.com/oceanshare/archive/2010/02/10/1667071.html 由于早期的一个项目在数据库设计建立时没有输出为E-R图,偶在对 ...
- 241. Different Ways to Add Parentheses——本质:DFS
Given a string of numbers and operators, return all possible results from computing all the differen ...
- Android为ViewPager增加切换动画——使用属性动画.
ViewPager作为Android最常用的的组件之一,相信大家在项目中会频繁的使用到的,例如利用ViewPager制作引导页.轮播图,甚至做整个app的表现层的框架等等. Android3.0以下不 ...
- Delphi日期时间 UNIX
Delphi日期时间,就是常见的 2014-05-02 10:37:35 --------------------------------------------------------------- ...
- SGU 140 扩展欧几里得
题目大意: 给定序列a[] , p , b 希望找到一个序列 x[] , 使a1*x1 + a2*x2 + ... + an*xn = b (mod p) 这里很容易写成 a1*x1 + a2*x2 ...
- CSS 水平居中
一.水平居中:行内元素解决方案 居中元素:文字.链接以及其它行内元素(inline或inline-*类型的元素,如inline-block,inline-table,inline-flex)解决方案: ...
- 推荐一款免安装的在线Visio流程工具ProcessOn
昨天收到一人的邮件,说某个软件叫ProcessOn是web版的visio,出于对技术知识的渴望以及自己的好奇所以对ProcessOn进行了一番体验.结果有点被这个软件给吸引上了,无论是在用户体验上,还 ...
- Repeater 合并单元格
前途页面: <asp:Repeater ID="rptList" runat="server" OnPreRender="rptList_Pre ...