[hdu 4869](14年多校I题)Turn the pokers 找规律+拓欧逆元

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情
Turn the pokers


Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 316    Accepted Submission(s): 101




Problem Description
During summer vacation,Alice stay at home for a long time, with nothing to do. She went out and bought m pokers, tending to play poker. But she hated the traditional gameplay. She wants to change. She puts these pokers face down, she decided to flip poker n times, and each time she can flip Xi pokers. She wanted to know how many the results does she get. Can you help her solve this problem?
 


Input
The input consists of multiple test cases. 
Each test case begins with a line containing two non-negative integers n and m(0<n,m<=100000). 
The next line contains n integers Xi(0<=Xi<=m).
 


Output
Output the required answer modulo 1000000009 for each test case, one per line.
 


Sample Input


3 4
3 2 3
3 3
3 2 3
 


Sample Output
8
3


Hint
For the second example:
0 express face down,1 express face up
Initial state 000
The first result:000->111->001->110
The second result:000->111->100->011
The third result:000->111->010->101

So, there are three kinds of results(110,011,101)


题目大意

给定M张牌,可以翻转N次,每次可以翻转恰好Xi张牌,刚开始牌面全部朝下,问经过N次翻转之后可能产生的扑克序列数(如样例hint)。

解题思路

现场还是没出……想到dp的思路但复杂度高达N^2.

可以观察到,我们最后正面朝上的牌的数量奇偶总是一定的(如1,3,5),因为不同奇偶情况就需要至少多翻一次,但翻动的次数已经固定不能更改。


考虑一次翻转,最多X1张牌正面朝上了,最少也是X1张。

如果第二次只翻转1张,再设1<X1<m 则最多会有X1+1张牌正面朝上,最少会有X1-1张牌正面朝上。


现在假设我们已经翻好k-1次

最多a张正面朝上,最少b张正面朝上

如果b>=Xk 则翻转后最少有b-Xk张正面朝上(其余的情况可以一次翻一张正面的,一张反面的,情况保持不变)。

否则,如果a>Xk,这时最少会有0张或1张正面朝上(根据a和Xk的奇偶性判断),

再否则,最少会有Ak-a张正面朝上(先把正面朝上的全部翻转,剩下的再翻便是最少张数)


关于最大值的讨论同理


最后关于组合数的计算,由于m固定不变,就可以根据组合数公式C(m,n)=C(m-1,n)*(n-m+1)/m 线性求解,由于1e9+9是大素数,除法操作可用逆元求解代替。

#include <cstdio>
#define LL long long
int n,m;
LL mod=1000000009;
LL a[100005];
void egcd(LL a,LL b,LL &x,LL &y)
{
  if (b==0)
  {
    x=1;y=0;
    return ;
  }
  egcd(b,a%b,x,y);
  LL t=x;
  x=y,y=t-a/b*y;
  return;
}
LL cal(LL x,LL y)
{
  LL cur=1,tmp=0,t=0;
  while(t<=y)
  {
    if (t>=x&&t<=y)
    if ((t-x)%2==0) tmp=(tmp+cur)%mod;
    t++;
    cur=cur*(m-t+1)%mod;
    LL t1,t2;
    egcd(t,mod,t1,t2);
    t1=(t1+mod)%mod;
    cur=cur*t1%mod;
  }
  return tmp;
}
int main()
{
  while (~scanf("%d%d",&n,&m)){
  LL upper,lower,plower,pupper;
  for (int i=1;i<=n;i++)
    scanf("%I64d",&a[i]);
  upper=lower=pupper=plower=0;
  for (int i=1;i<=n;i++)
  {
    if (plower>=a[i]) lower-=a[i];
    else if (pupper>=a[i]) lower=0+((pupper+a[i])%2==1);
    else lower=a[i]-pupper;
    if (pupper+a[i]<=m) upper+=a[i];
    else if (plower+a[i]<=m) upper=m-((plower+a[i])%2==1);
    else {upper=m-(plower+a[i]-m);}
    plower=lower;//plower代表上一步的最小值
    pupper=upper;//pupper代表上一步的最大值
  }
    printf("%I64d\n",cal(lower,upper));
  }
  return 0;
}




[南大ICS-PA2] 字符串处理函数和printf实现 [南大ICS-PA2] 程序、运行时环境与AM 字符串处理函数和printf实现 阅读详情

相关推荐

实验三、数字PID控制器的设计

由图可知,由于微分环节的作用,在曲线的起始上升段出现了一个尖锐的波峰,之后曲线也呈衰减的振荡:随着Td增加,系统的超调量增大,但曲线尖锐的起始上升阶段后响应速度减慢,可以看出Td越小。对大数算法,缩短采样周期可使控制回路性能改善,但采样周期缩短时,频繁的采样必然会占用较的计算工作时间,同时也会增加计算机的计算负担,而对有些变化缓慢的受控对象无需很高的采样频率即可满意地进行跟踪,过的采样反而没有少实际意义。随着Kp的增加,闭环系统的超调量增加,响应速度加快,控制时间加长,稳态误差减少;

m0_51738372的博客 7996

HDU4869:Turn the pokers(费马小定理+快速幂)

Problem Description During summer vacation,Alice stay at home for a long time, with nothing to do. She went out and bought m pokers, tending to play poker. But she hated the traditional gameplay. S

ACM!荣耀之路! 5429

QT6实现USB摄像头接入显示与抓拍功能实现

QT实现USB摄像头接入显示 一、UVC协议简介 UVC全称是USB Video Class(USB视频类),是一种标准化的USB视频设备通信协议,它定义了摄像头与主机之间的数据传输协议和格式。 UVC协议的出现,解决了摄像头厂商之间互不兼容,以及摄像头应用开发与平台之间的散乱问。 UVC标准是由USB-IF主导制定的,目前最新的版本是UVC 1.5,UVC的缺省设置类容易实现,不需要额外的驱动程序。

热土程序园,利他愉己~ 3372

杭电第三场——Fansblog(费马小定理+逆元+威尔逊定理)

目传送门 暑假打的时候第一次刚遇到这是一脸懵逼,那场比赛虽然比较惨烈,但是队友强大,还是做出了这道,当时还给我讲了这道,当时懵懵懂懂就知道用威尔逊定理,但是最近又做到了这道. emmmm…还是不会,(生气了,盘它)。 目大意: T组,每组一个素数P,这个数有点大(1e9到1e14)让你到一个素数Q,Q<P,并且Q最大。也就是让你到小于P并且距离P最近的素数。 然后求的是(...

HANGANG的博客 236

2017训练第二场 hdu6050 Funny Function(数学+快速幂+逆元

2017训练第二场 hdu6050 Funny Function(数学+快速幂+逆元

qq_37412344的博客 434

HDU 4869逆元,反转硬币

解:

I will Do iT @ hlyblog.net 1067

HDU 4869 Turn the pokers

目链接: http://codeforces.com/problemset/problem/1/C 意:目巴拉巴拉说了一通,其实就是给出一个正n边形上的三个点,要你求出这个正n边形的面积,需要n最小 解:

忆梦 663

HDU 4869 Turn the pokers

During summer vacation,Alice stay at home for a long time, with nothing to do. She went out and bought m pokers, tending to play poker. But she hated the traditional gameplay. She wants to change. She

Occult 405

hdu4869Turn the pokers 组合数学+逆元

//m个卡片 , n次操作 , 每次操作可以将xi卡片反转 //问最后有少卡片的情况 //对于最后卡片的情况 , 1的数目个数的奇偶性肯定和奇数xi的个数的奇偶性一样 //因为奇数xi可以将1的个数加上奇数或者减去奇数 //而且这个1的数目区间一定是连续的[st,en] //那么就是维护st 和 en //对于st是有1就1 //en是有0就0 #include #include #in

ijbuhv的专栏 581

hdu 4869 Turn the pokers (思维)

Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 196    Accepted Submission(s): 51 Problem Description During summer

To be what you what to be! 1094

LaTeX入门实战:TeXlive与TeXstudio安装配置及中文文档排版指南

排版系统的核心理念是内容与样式分离,作者只需用标记语言描述文档结构,引擎自动处理编号、引用与布局。TeXlive作为跨平台、宏包完整的发行版,搭配专门为LaTeX设计的TeXstudio编辑器,构成新手最稳妥的入门组合。从下载镜像、全量安装宏包到配置XeLaTeX编译器,每一步都决定中文文档能否顺利编译。借助ctex宏包,数学公式、图片表格和章节标均可自动编号,解决论文写作中最繁琐的排版细节。面对编译报错、中文乱码、表格溢出等高频问,掌握日志定位与常见修法即可快速通关。无论是应对课程论文还是期刊投稿,这

aofan9566的博客 325

HDU4869Turn the pokers(快速幂求逆元+组合数)

意: 给出n次转和m相同且一开始背面向上,输入n个数xi,表示xi转,问最后得到的的情况的总数。 思路: 首先我们可以假设一开始背面状态为0,正面则为1,最后即是求ΣC(m,k),k为所有能取到1的情况。首先我们要确认最后1的奇偶性。因为一次转0->1,或者1->0,则最后所有1的情况的奇偶性相同。然后我们要到最小的1的个数i和最大的1的个数j...

anquan1533的博客 160

HDU 4869 Turn the pokers 逆元

解地址:点击打开链接 解:最终的结果一定是连续出现的,只需要求出最终的区间。因为如果对同一进行两次操作,的状态不改变。故转次数一定是减少偶数次。如果所有数的和是奇数,那么最终结果也一定是奇数。同理,偶数也是一样的。所以只要递推求出最后的区间,计算sum(C(xi,m)(i=0,1,2。。。)),m是总数,xi是在区间内连续的奇数或偶数,在模10^9+9就是最终的答案。 #in

Kewowlo 942

hdu 4869 Turn the pokers (2014联合第一场 I)

Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1265    Accepted Submission(s): 465 Problem Description During summ

ddyyxx的程序员之路 1863

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

Turn the pokers 大意:给出n次操作,给出m个扑克,然后给出n个操作的个数a[i],每个a[i]代表可以的扑克的个数,求最后可能出现的扑克的组合情况。 Hint Sample Input: 3 3 3 2 3 For the this example: 0 express face down,1 express face up Ini

GLSilence的专栏 779

HDU4869 Turn the pokers

意: 输入操作次数n和扑克数m,一开始扑克全都背面朝上。现在输入n个数xi,表示每次选择xi转,问最后的的情况有少种可能。 //的时候看了目,自己不会写额,kanl 思路: 背面为0,正面为1,假设最后能出现x个1,因为每个都是一样的,所以最后x个1的情况有C(m,x)个。 现在问转化为求最后可能出现几个1。 最后的结果奇偶性相同,

wust_ZJX的专栏 1051

hdu 4869 Turn the pokers(递推&组合数学&逆元)

Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1279    Accepted Submission(s): 466 Problem Description During summer v

记录成长的点点滴滴. . . . . 1118
上一篇: [zoj 3774]Power of Fibonacci 数论(二次剩余 拓展欧几里得 等比数列求和)
下一篇: [poj 2976]Dropping tests 01分数规划
ahm001
博客等级 码龄17年 21粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值