hdu 4869 Turn the pokers 策略(组合数)
题意:输入操作次数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 策略(组合数)的更多相关文章
- HDU 4869 Turn the pokers(推理)
HDU 4869 Turn the pokers 题目链接 题意:给定n个翻转扑克方式,每次方式相应能够选择当中xi张进行翻转.一共同拥有m张牌.问最后翻转之后的情况数 思路:对于每一些翻转,假设能确 ...
- HDU 4869 Turn the pokers (2014多校联合训练第一场1009) 解题报告(维护区间 + 组合数)
Turn the pokers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- hdu 4869 Turn the pokers (2014多校联合第一场 I)
Turn the pokers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 4869 Turn the pokers(思维+组合公式+高速幂)
pid=4869" target="_blank">Turn the pokers 大意:给出n次操作,给出m个扑克.然后给出n个操作的个数a[i],每一个a[i] ...
- 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 ...
- hdu 4869 Turn the pokers (思维)
Turn the pokers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- hdu 4869 Turn the pokers(组合数+费马小定理)
Problem Description During summer vacation,Alice stay at home for a long time, with nothing to do. S ...
- 2014多校第一场 I 题 || HDU 4869 Turn the pokers(费马小定理+快速幂模)
题目链接 题意 : m张牌,可以翻n次,每次翻xi张牌,问最后能得到多少种形态. 思路 :0定义为反面,1定义为正面,(一开始都是反), 对于每次翻牌操作,我们定义两个边界lb,rb,代表每次中1最少 ...
- HDU 4869 Turn the pokers (2014 多校联合第一场 I)
HDOJ--4869--Turn the pokers[组合数学+快速幂] 题意:有m张扑克,开始时全部正面朝下,你可以翻n次牌,每次可以翻xi张,翻拍规则就是正面朝下变背面朝下,反之亦然,问经过n次 ...
随机推荐
- 模拟登陆request-session
#人人网的模拟登录 import requests import urllib from lxml import etree #获取session对象 session = requests.Sessi ...
- CV方向:纽劢科技,复星,蚂蚁金服,哈喽出行,海康威视
以下均为CV方向实习面试,岗位算法工程师助理.时间均在2019年3月至4月之间. 纽劢科技(均电话): 技术2面,HR1面 复星(现场): 技术只有1面 ...
- 解决android的键盘弹出时,html页面的高度被压缩
如果元素的高度是用100%表示,那么,安卓的键盘弹出时,高度会发生变化,导致布局混乱,所以最好给高度设置像素高度 $("html,body").height(window.inne ...
- CAD控件使用教程 自定义实体的实现
自定义实体的实现 1 . 自定义实体... 3 1.1 说明... 3 1.2 类的类型信息... 3 1.3 worldDraw.. 4 1.4 ...
- Laravel Homestead的安装和使用(照搬)
原文:https://blog.csdn.net/woqianduo/article/details/81091154/ 1.简介 1.1.Homestead是什么 Laravel Homestead ...
- 基于ant design form的二次封装
// standardForm.js import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; ...
- get data from splunk
link: http://dev.splunk.com/view/python-sdk/SP-CAAAER5 download SDK & setup with python code: im ...
- 计算机中的CPU
今天写一下计算机中最核心的一部分,就是计算机的大脑---CPU.CPU也就是中央处理器(Central Processing Unit).中央处理器是一块超大规模的集成电路,是一台计算机的运算核心(C ...
- 《BUG创造队》第五次作业:项目需求分析改进与系统设计
项目 内容 这个作业属于哪个课程 2016级软件工程 这个作业的要求在哪里 实验九 团队作业5-团队项目需求改进与系统设计 团队名称 BUG创造队 作业学习目标 1.编写完整<软件需求规格说明书 ...
- js获取当前位置
<!DOCTYPE html><html><head><meta name="viewport" content="initia ...