题意:输入操作次数n和扑克牌数m,一開始扑克牌全都背面朝上。

如今输入n个数xi,表示选择xi张牌翻转,问最后的牌的情况有多少种可能?

题解:

我们将一開始的牌觉得是m个0。而翻转就是将0变成1或者1变成0。

最后的答案就是ans=∑C(m,k)。C(m。k)为组合数,k为全部能取到的1的可能个数。具体的解释,先了解最后1的个数的奇偶性,跟全部翻牌数的和的奇偶同样(每次翻牌,要么0->1。要么1->0,都是在改变1的个数奇偶)。之后我们须要找到最少有i个1,以及最大有j个1;i的情况就是有1就翻1,j的情况就是有0就翻0,而中间的情况时。取偶数步数,一半翻0。一半翻1,保持不变。所以能够确定i,i+2,i+4,...,j-2,j都能被翻到。最后ans=∑C(m,k)(i<=k<=j&&k%2==i%2)。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <ctime>
#include <algorithm>
#include <cmath>
#include <queue>
#include <vector>
using namespace std; #define LL __int64
const int maxn=1e5+10;
const int mod=1e9+9;
LL c[maxn];
LL pow_mod(LL a,int b)
{
LL s=1;
while(b)
{
if(b&1)s=s*a%mod;
a=a*a%mod;
b=b>>1;
}
return s;
}
int main()
{
int n,m;
//freopen("C:\\Documents and Settings\\Administrator\\桌面\\in.txt","r",stdin);
//freopen("C:\\Documents and Settings\\Administrator\\桌面\\out.txt","w",stdout);
//printf("%I64d\n",pow_mod(2,10));
while(scanf("%d%d",&n,&m)!=EOF)
{
int i,j,k,x,p,q;
i=j=0;
for(k=0;k<n;k++)
{
scanf("%d",&x);
//求最小1的个数i
if(i>=x)p=i-x;
else if(j>=x)p=((i&1)==(x&1)?0:1);
else p=x-j;
//求最大1的个数j
if(j+x<=m)q=j+x;
else if(i+x<=m)q=(((i+x)&1)==(m&1)?m:m-1);
else q=2*m-(i+x);
i=p;j=q;
//printf("**%d %d\n",i,j);
} LL ans=0;
c[0]=1;
if(i==0)ans+=c[0];
for(k=1;k<=j;k++)
{
if(m-k<k)c[k]=c[m-k];
else c[k]=c[k-1]*(m-k+1)%mod*pow_mod(k,mod-2)%mod;
if(k>=i&&(k&1)==(i&1))ans+=c[k];
}
printf("%I64d\n",ans%mod);
}
return 0;
}

hdu 4869 Turn the pokers 策略(组合数)的更多相关文章

  1. HDU 4869 Turn the pokers(推理)

    HDU 4869 Turn the pokers 题目链接 题意:给定n个翻转扑克方式,每次方式相应能够选择当中xi张进行翻转.一共同拥有m张牌.问最后翻转之后的情况数 思路:对于每一些翻转,假设能确 ...

  2. HDU 4869 Turn the pokers (2014多校联合训练第一场1009) 解题报告(维护区间 + 组合数)

    Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. hdu 4869 Turn the pokers (2014多校联合第一场 I)

    Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. HDU 4869 Turn the pokers(思维+组合公式+高速幂)

    pid=4869" target="_blank">Turn the pokers 大意:给出n次操作,给出m个扑克.然后给出n个操作的个数a[i],每一个a[i] ...

  5. HDU 4869 Turn the pokers (2014 Multi-University Training Contest 1)

    Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  6. hdu 4869 Turn the pokers (思维)

    Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  7. hdu 4869 Turn the pokers(组合数+费马小定理)

    Problem Description During summer vacation,Alice stay at home for a long time, with nothing to do. S ...

  8. 2014多校第一场 I 题 || HDU 4869 Turn the pokers(费马小定理+快速幂模)

    题目链接 题意 : m张牌,可以翻n次,每次翻xi张牌,问最后能得到多少种形态. 思路 :0定义为反面,1定义为正面,(一开始都是反), 对于每次翻牌操作,我们定义两个边界lb,rb,代表每次中1最少 ...

  9. HDU 4869 Turn the pokers (2014 多校联合第一场 I)

    HDOJ--4869--Turn the pokers[组合数学+快速幂] 题意:有m张扑克,开始时全部正面朝下,你可以翻n次牌,每次可以翻xi张,翻拍规则就是正面朝下变背面朝下,反之亦然,问经过n次 ...

随机推荐

  1. 使用JDBC创建出版社和书籍管理系统

    1.需求 已知如下两个表: publisher id name(唯一) address book id isbn name publisher_id 欢迎进入书籍管理系统 1.出版社管理:增.删(na ...

  2. GET方法与POST方法的区别

    区别一:get重点在从服务器上获取资源,post重点在向服务器发送数据: 区别二:get传输数据是通过URL请求,以field(字段)= value的形式,置于URL后,并用"?" ...

  3. php腾讯云短信验证码

    腾讯云短信控制台:https://console.cloud.tencent.com/sms 腾讯云短信 PHP SDK:https://github.com/qcloudsms/qcloudsms_ ...

  4. 【HTML5】可以省略标记的元素

  5. Unexpected token d in JSON at position 669 while parsing near '...ct-mode":"^6.0.2"}

    问题 在安装 babel 的时候,遇到问题 Unexpected token d in JSON at position 669 while parsing near '...ct-mode" ...

  6. Vue-cli 3.0自定义脚手架

    一.进入项目地址 https://github.com/vuejs/vue-cli ,选择 docs目录查看具体安装流程. 中文文档:https://cli.vuejs.org/zh 可以看到我电脑上 ...

  7. 安装php扩展(以swoole)为例

    一.下载swoole到/usr/local/src目录下,操作 git clone https://gitee.com/swoole/swoole.git; 二.cd swoole,phpize(如果 ...

  8. 常见的Redis问题?

    Redis的那些最常见面试问题[转] 1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型的内存数据 ...

  9. tomcat时间与系统时间不一致问题

    我在部署应用到centos系统上的tomcat服务器中运行,发现操作系统的时间和tomcat中的访问日志的时间与系统时间不一致,但是查看当前操作系统的时区也是CST时区(中国标准时区). 查看系统的时 ...

  10. pip 打包项目配置库

    打包项目中配置库(filename为文件名,可修改) pip freeze > filename.txt 安装配置文件中所有的库包 pip install -r filename.txt 如提示 ...