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 ...
随机推荐
- 各种浏览器css hack
转载 http://www.cnblogs.com/jikey/archive/2010/06/21/1761924.html IE都能识别*,标准浏览器(如FF)不能识别*:IE6能识别*,但不能识 ...
- 在jsp页面解析json的2种方法
方法1: $(function() { $("#btn").click(function() { $.ajax({ url : "fastjson.do", s ...
- SVN clean up问题
问题如截图所示: 解决方法:在根目录clean up,注意把所有的选项都勾上
- 449. Serialize and Deserialize BST——几乎所有树的面试题目都会回到BFS或者DFS,使用BFS,None节点存#
Serialization is the process of converting a data structure or object into a sequence of bits so tha ...
- 闲聊CSS之关于clearfix--清除浮动[转]
.clearfix:after { content: " "; display: block; clear: both; height:; } .clearfix { zoom:; ...
- linux 磁盘管理以及维护
Linux系统中,进行频繁的读写操作,容易发送只读.以及磁盘损坏等故障.下文为其解决方案: 1.如何界定磁盘已经存在故障 方法一(界定将如下内容另存为Repair.sh然后执行即可): #!/bin/ ...
- 使用Apache HttpClient
在一般情况下,如果只是需要Web站点的某个简单页面提交请求并获取服务器响应,完全可以使用前面所介绍的HttpConnection来完成.但在绝大部分情况下,Web站点的网页可能没这么简单,这些页面并不 ...
- QQ2013登录报文简单分析(不可用于非法用途)
[NO.1 2013-05-08 00:31:16 046 SEND 115字节]02 31 03 08 25 27 B5 88 6F 91 D2 03 00 00 00 0101 01 00 00 ...
- 常州培训 day1 解题报告
第一题:(骗分容易,AC难.) 题目大意: 给出一个字符串,找出满足条件A的区间的个数.A:字符A,B,C的出现次数相同. 都出现0次也算,区间的长度可以是0(就是只有一个数).30% |S| ≤ 1 ...
- lucene 查询的使用
各种查询方式一:使用QueryParser与查询语法.(会使用分词器) MultiFieldQueryParser查询字符串 ------------------------> Query对象 ...