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 (递推 组合数取模)的更多相关文章

  1. cf166e 在四面体上寻找路线数 递推,取模

    来源:codeforces                 E. Tetrahedron   You are given a tetrahedron. Let's mark its vertices ...

  2. 洛谷P4723 【模板】线性递推(多项式取模 线性代数)

    题意 题目链接 Sol Orz shadowice 注意,下面的代码自带O(随时TLE)倍大常数.. #include<bits/stdc++.h> #define Pair pair&l ...

  3. 排列组合+组合数取模 HDU 5894

    // 排列组合+组合数取模 HDU 5894 // 题意:n个座位不同,m个人去坐(人是一样的),每个人之间至少相隔k个座位问方案数 // 思路: // 定好m个人 相邻人之间k个座位 剩下就剩n-( ...

  4. hdu 3944 DP? 组合数取模(Lucas定理+预处理+帕斯卡公式优化)

    DP? Problem Description Figure 1 shows the Yang Hui Triangle. We number the row from top to bottom 0 ...

  5. 组合数取模Lucas定理及快速幂取模

    组合数取模就是求的值,根据,和的取值范围不同,采取的方法也不一样. 下面,我们来看常见的两种取值情况(m.n在64位整数型范围内) (1)  , 此时较简单,在O(n2)可承受的情况下组合数的计算可以 ...

  6. Uva12034 (组合数取模)

    题意:两匹马比赛有三种比赛结果,n匹马比赛的所有可能结果总数 解法: 设答案是f[n],则假设第一名有i个人,有C(n,i)种可能,接下来还有f(n-i)种可能性,因此答案为 ΣC(n,i)f(n-i ...

  7. [BZOJ 3129] [Sdoi2013] 方程 【容斥+组合数取模+中国剩余定理】

    题目链接:BZOJ - 3129 题目分析 使用隔板法的思想,如果没有任何限制条件,那么方案数就是 C(m - 1, n - 1). 如果有一个限制条件是 xi >= Ai ,那么我们就可以将 ...

  8. lucas定理解决大组合数取模

    LL MyPow(LL a, LL b) { LL ret = ; while (b) { ) ret = ret * a % MOD; a = a * a % MOD; b >>= ; ...

  9. 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 ...

随机推荐

  1. jdbc URL中的各个参数详解

    常用的有两个,一个是gjt(Giant JavaTree)组织提供的mysql驱动,其JDBC Driver名称(Java类名)为:org.gjt.mm.mysql.Driver 详情请参见网站:ht ...

  2. RestSharp .net 轻量级rest客户端

    RestSharp Simple REST and HTTP API Client for .NET 官网:http://restsharp.org/ GiHub: https://github.co ...

  3. Web总结

    Web总结 学习web前端理论基础必然是要过关的,这里我总结了一下比较基础的常用理论,还是比较有用哒! 一.名词解释 1.横切 在固定页面的宽度(按栅格化进行)并且对高度没有限制的容器称为一个标准横切 ...

  4. 教你如何做好SEO优化中的前端优化

    网站的速度是很多人都面临的问题,其实许多网站,都没有特意的去优化加载速度,对于一个网站来说,加速不但提高了用户体验(如果一个网站在几秒内没 有打开,大多数用户选择的是关闭而非等待),而且对于SEO的流 ...

  5. 指定socket文件连接mysql

    1.利用ps aux |grep mysql  查看--socket 路径 2.创建软连接.创建文件 3.登录成功

  6. 使用SMSManager短信管理器实现短信群发

    import java.util.ArrayList; import android.os.Bundle;import android.provider.ContactsContract;import ...

  7. [Js]基础知识

    一.JavaScript组成 1.ECMAScript 解释器.翻译(提供功能有限,如加减乘除,定义变量.函数等)   几乎没有兼容性问题 2.DOM    有一些兼容性问题 3.BOM(用的少,交互 ...

  8. POJ 2594 传递闭包的最小路径覆盖

    Treasure Exploration Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 7171   Accepted: 2 ...

  9. hdu 4609 3-idiots

    http://acm.hdu.edu.cn/showproblem.php?pid=4609 FFT  不会 找了个模板 代码: #include <iostream> #include ...

  10. Dictionary解析json,里面的数组放进list,并绑定到DataGridView指定列

    Dictionary解析json,1.根据json建立相应的实体类,json里面的数组形式放进list集合2.取list中的数据,将相应的数据绑定到DataGridView,如下:循环(动态添加一行数 ...