hdu4869 费马小+快速幂
思路:费马小+快速幂
无论怎么翻,每一步的1出现的可能个数的奇偶性是一样的,因为奇数 - 偶数 = 奇数,偶数 - 偶数 = 偶数,有一张牌被重叠了,那么就减去一个偶数2,所以怎么重叠都不会变(当前奇偶性与当前总翻牌数奇偶性一样),所以我们只要找到1的最大可能数,和最小可能数(当然最大和最小奇偶性一定相同),然后排列组合求和就行了,假如一共有10张牌,1出现的最大可能数是6 ,最小是2,那么ans = C(10 ,2) + C(10 ,4) + C(10 ,6).
最大和最小之间的同奇偶的数一定可以出现,就是搓1位,自己可以画画,这样又有一个蛋疼的问题,就是排列组合必然会涉及到除法,可是除法怎么处理这个 (a / b) % c因为他不等于 (a % c) / (b % c) ,乘法还可以,其实我们可以除法转化成乘法,使得(a / b) % c = a * pow(b ,c - 2) % c,这里的c是质数,下面证明一下
根据费马小定理有
a^(p - 1) % p = 1 % p
那么
(a^(p - 1) / a) % p = (1 / p) % p 则 a^(p - 2) = (1 / a) % p
除以a只要乘以1/a也就是乘以等号左侧,这样就把除法变成乘法。
注意成立的原因是在本题目里 a^(p-1)/p是一个大于等于p的数。
对于求1可能出现的次数min ,和max,就是分情况讨论,直接看代码自己模拟一下代码就懂了,这里就不解释了,全解释了读者看完也就没意思了。
#include<stdio.h> #define MOD 1000000009
__int64 X[110000];
__int64 C[110000]; __int64 quick_pow(__int64 a ,__int64 b)
{
__int64 c = 1;
while(b)
{
if(b&1) c *= a;
a *= a ,b /= 2;
c %= MOD ,a %= MOD;
}
return c;
} int main ()
{
int n ,m ,i;
while(~scanf("%d %d" ,&m ,&n))
{
for(i = 1 ;i <= m ;i ++)
scanf("%I64d" ,&X[i]); __int64 MIN = 0 ,MAX = 0;
for(i = 1 ;i <= m ;i ++)
{
__int64 mi ,ma;
if(X[i] <= MIN) mi = MIN - X[i];
else if(X[i] > MAX) mi = X[i] - MAX;
else mi = (X[i]&1) != (MIN&1); if(X[i] + MAX <= n) ma = X[i] + MAX;
else if(X[i] + MIN > n) ma = n * 2 - (MIN + X[i]);
else ma = ((X[i] + MIN) & 1) == (n & 1) ? n : n - 1;
MAX = ma ,MIN = mi;
} __int64 sum = 0;
C[0] = 1;
if(MIN == 0) sum ++;
for(i = 1 ;i <= MAX ;i ++)
{
if(n - i < i) C[i] = C[n-i];
else
C[i] = C[i-1] * (n - i + 1) % MOD * quick_pow(i ,MOD - 2) % MOD;
if(i >= MIN && (i&1) == (MIN&1))
sum = (sum + C[i]) % MOD;
}
printf("%I64d\n" ,sum);
}
return 0;
}
hdu4869 费马小+快速幂的更多相关文章
- hdu 4704 Sum (整数和分解+快速幂+费马小定理降幂)
题意: 给n(1<n<),求(s1+s2+s3+...+sn)mod(1e9+7).其中si表示n由i个数相加而成的种数,如n=4,则s1=1,s2=3. ...
- nyoj1000_快速幂_费马小定理
又见斐波那契数列 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 斐波那契数列大家应该很熟悉了吧.下面给大家引入一种新的斐波那契数列:M斐波那契数列. M斐波那契数列 ...
- poj 3734 Blocks 快速幂+费马小定理+组合数学
题目链接 题意:有一排砖,可以染红蓝绿黄四种不同的颜色,要求红和绿两种颜色砖的个数都是偶数,问一共有多少种方案,结果对10007取余. 题解:刚看这道题第一感觉是组合数学,正向推了一会还没等推出来队友 ...
- 数论 --- 费马小定理 + 快速幂 HDU 4704 Sum
Sum Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=4704 Mean: 给定一个大整数N,求1到N中每个数的因式分解个数的 ...
- HDU 5793 A Boring Question (逆元+快速幂+费马小定理) ---2016杭电多校联合第六场
A Boring Question Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- [HDOJ5667]Sequence(矩阵快速幂,费马小定理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5667 费马小定理: 假如p是质数,且gcd(a,p)=1,那么 a^(p-1)≡1(mod p). 即 ...
- 2014多校第一场 I 题 || HDU 4869 Turn the pokers(费马小定理+快速幂模)
题目链接 题意 : m张牌,可以翻n次,每次翻xi张牌,问最后能得到多少种形态. 思路 :0定义为反面,1定义为正面,(一开始都是反), 对于每次翻牌操作,我们定义两个边界lb,rb,代表每次中1最少 ...
- BZOJ_[HNOI2008]_Cards_(置换+Burnside引理+乘法逆元+费马小定理+快速幂)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1004 共n个卡片,染成r,b,g三种颜色,每种颜色的个数有规定.给出一些置换,可以由置换得到的 ...
- hdu_4869(费马小定理+快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4869 Turn the pokers Time Limit: 2000/1000 MS (Java/O ...
随机推荐
- 分布式session实现方式
一.背景 在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理. 如果不做任何处理的话,用户将出现频繁登录的现象,比如集群中存在A.B两台服务器,用户在第一次访问网站时,N ...
- Python编程中可能经常用到的函数
1.os.walk() 一般用法为 import os ph=r'D:\temp\build' for root,dirs,files in os.walk(ph): print(root,dirs, ...
- ES6学习笔记(3)- 对象的功能性扩展
一.什么是对象字面量 对象字面量就是创建对象(Object)的一种简单容易理解的方式,再通俗点就是所谓的键值对的集合.举个简单的例子: let book = { name: 'JavaScript', ...
- 2019HDU多校第七场 HDU6656 Kejin Player H 【期望递归】
一.题目 Kejin Player H 二.分析 因为在当前等级$i$,如果升级失败可能会退回到原来的某一等级$x$,相当于就是失败的期望就是$E + (Sum[i-1] - Sum[x-1]) + ...
- 解析分布式应用框架Ray架构源码
摘要:Ray的定位是分布式应用框架,主要目标是使能分布式应用的开发和运行. Ray是UC Berkeley大学 RISE lab(前AMP lab) 2017年12月 开源的新一代分布式应用框架(刚发 ...
- 一种3位sar adc工作过程推导(二)
3位sar adc采用下图的电容阵列,需要23个电容,它的基本单元有二进制加权的电容阵列.1个与LSB电容等值的电容:它利用电容上的初始电荷再分配完成二进制搜索算法,因此功耗一般比较小,而且不需要额外 ...
- 使用C# (.NET Core) 实现单体设计模式 (Singleton Pattern)
本文的概念内容来自深入浅出设计模式一书 由于我在给公司做内培, 所以最近天天写设计模式的文章.... 单体模式 Singleton 单体模式的目标就是只创建一个实例. 实际中有很多种对象我们可能只需要 ...
- 【linux】驱动-8-一文解决设备树
目录 前言 8. Linux设备树 8.1 设备树简介 8.2 设备树框架 8.2.1 设备树格式 8.2.1.1 DTS 文件布局 8.2.1.2 node 格式 8.2.1.3 propertie ...
- Elasticsearch扩展X-pack实施流程-实施
Elasticsearch扩展X-PACK实施流程 elasticsearch5.2.1安装X-PACK,对ES集群进行监控,报警,安全验证,报告,图形化操作 注意 版本号需要固定,小版本都不能差,要 ...
- C++并发与多线程学习笔记--参数传递详解
传递临时对象 陷阱 总结 临时对象作为线程参数 线程id的概念 临时对象构造时的抓捕 成员函数指针做线程函数 传递临时对象作为线程参数 创建的工作线程不止一个,线程根据编号来确定工作内容.每个线程都需 ...