2014多校第一场 I 题 || HDU 4869 Turn the pokers(费马小定理+快速幂模)
题意 : m张牌,可以翻n次,每次翻xi张牌,问最后能得到多少种形态。
思路 :0定义为反面,1定义为正面,(一开始都是反), 对于每次翻牌操作,我们定义两个边界lb,rb,代表每次中1最少时最少的个数,rb代表1最多时的个数。一张牌翻两次和两张牌翻一次 得到的奇偶性相同,所以结果中lb和最多的rb的奇偶性相同。如果找到了lb和rb,那么,介于这两个数之间且与这两个数奇偶性相同的数均可取到,然后在这个区间内求组合数相加(若lb=3,rb=7,则3,5,7这些情况都能取到,也就是说最后的结果就是在所有的牌中选3张翻过去+选5张+选7张)。所以,要根据情况先求出边界。
由于数据相当大,所以要将组合中的除法变成乘法,C(n, m) = n!/(m!*(n-m)!),由 费马小定理:若p是质数 , a^(p-1) = 1%p,那么,a^(p-2) = 1/a%p,利用这个公式,得到1/(m!*(n-m)!) = (m!*(n-m)!)^(p-2) mod p,即C(n, m) = n!*(m!*(n-m)!)^(p-2) mod p,这样就可以变除为乘。而 求(n-m)!)^(p-2 )mod p中用快速幂简化运算。
here这个人的代码对于边界解释的较为详尽。
官方题解 :
最终的结果一定是连续出现的,只需要求出最终的区间。
因为如果对同一张牌进行两次操作,牌的状态不改变。故牌的翻转次数一定是减少偶数次。如果所有数的和是奇数,那么最终结果也一定是奇数。同理,偶数也是一样的。
所以只要递推求出最后的区间,计算sum(C(xi,m)(i=0,1,2。。。)),m是总牌数,xi是在区间内连续的奇数或偶数,在模10^9+9就是最终的答案。
#include <cstdio>
#include <cstring>
#include <iostream> using namespace std ; #define mod 1000000009
#define LL __int64 LL f[] ;
void mul()
{
f[] = ;
for(int i = ; i < ; i++)
f[i] = (f[i-] * i)%mod ;
} LL multimod(LL a,LL b)
{
LL res = ;
while(b)
{
if(b & )
{
res *= a ;
res %= mod ;
}
b >>= ;
a *= a ;
a %= mod ;
}
return res ;
}
int main()
{
int n , m ;
mul() ;
while(scanf("%d %d",&n,&m) != EOF)
{
int x ;
scanf("%d",&x) ;
int lb = x, rb = x ;
for(int i = ; i < n ; i++)
{
scanf("%d",&x) ;
int l = lb - x ;
int r = rb + x ;
if(l < ) {
if(rb - x <= ) l = x - rb ;
else l = ( (lb - x)% + )% ;//类似于奇数张牌中翻奇数张最后肯定是偶数,奇数翻偶数张肯定是奇数,肯定会有一个中间状态得到最后非0即1
//此时,正处于lb<x<rb的时候,当翻x张牌时,若x的奇偶性与lb,rb相同时,则代表刚好是翻牌已经达到的某个状态,也就是说把剩下的x张都反过来即可,而奇偶若是不同,说明要么多一张或者是少一张,所以就是1.
}
if(r > m){
if(lb + x <= m) r = m - (rb + x)%;
else r = m-(lb+x - m) ;
}
lb = l ;
rb = r ;
}
LL ans = ;
for(int i = lb ; i <= rb ; i += )
ans += ((f[m] % mod) * (multimod((f[i]*f[m-i]) % mod,mod-)))%mod ;
cout << ans % mod << endl ;
}
return ;
}
2014多校第一场 I 题 || HDU 4869 Turn the pokers(费马小定理+快速幂模)的更多相关文章
- 数论 --- 费马小定理 + 快速幂 HDU 4704 Sum
		
Sum Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=4704 Mean: 给定一个大整数N,求1到N中每个数的因式分解个数的 ...
 - HDU 4704 Sum(隔板原理+组合数求和公式+费马小定理+快速幂)
		
题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=4704 Problem Description Sample Input 2 Sample Outp ...
 - hdu 4704 Sum【组合数学/费马小定理/大数取模】By cellur925
		
首先,我们珂以抽象出S函数的模型:把n拆成k个正整数,有多少种方案? 答案是C(n-1,k-1). 然后发现我们要求的是一段连续的函数值,仔细思考,并根据组合数的性质,我们珂以发现实际上答案就是在让求 ...
 - 2014多校第一场J题 || HDU 4870 Rating(DP || 高斯消元)
		
题目链接 题意 :小女孩注册了两个比赛的帐号,初始分值都为0,每做一次比赛如果排名在前两百名,rating涨50,否则降100,告诉你她每次比赛在前两百名的概率p,如果她每次做题都用两个账号中分数低的 ...
 - 2014多校第一场 E 题 || HDU 4865 Peter's Hobby (DP)
		
题目链接 题意 : 给你两个表格,第一个表格是三种天气下出现四种湿度的可能性.第二个表格是,昨天出现的三种天气下,今天出现三种天气的可能性.然后给你这几天的湿度,告诉你第一天出现三种天气的可能性,让你 ...
 - 2014多校第一场A题 || HDU 4861 Couple doubi
		
题目链接 题意 : 有K个球,给你一个数P,可以求出K个值,(i=1,2,...,k) : 1^i+2^i+...+(p-1)^i (mod p).然后女朋友先取,再xp取,都希望赢,如果女朋友能赢输 ...
 - 2014多校第一场D题 || HDU 4864 Task (贪心)
		
题目链接 题意 : 用N台机器,M个任务,每台机器都有一个最大工作时间和等级,每个任务有一个需要工作时间和一个等级.如果机器完成一个任务要求是:机器的工作时间要大于等于任务的时间,机器的等级要大于等于 ...
 - hdu 4704 sum(费马小定理+快速幂)
		
题意: 这题意看了很久.. s(k)表示的是把n分成k个正整数的和,有多少种分法. 例如: n=4时, s(1)=1 4 s(2)=3 1,3 3,1 2,2 s ...
 - hdu  4704(费马小定理+快速幂取模)
		
Sum Time Limit: 2000/ ...
 
随机推荐
- NFS网络操作系统介绍以及相关应用
			
1. NFS服务简介 NFS是Network File System 的缩写,中文名称为网络文件系统,由Sun公司开发,功能是通过网络让不同的机器.不同的操作能够彼此分享数据,让应用程序在客户端通过网 ...
 - Qt for Android 程序禁止屏幕旋转
			
有时候我们希望让一个程序的界面始终保持在一个方向,不随手机(平板)方向旋转而变化:在AndroidManifest.xml的每一个需要禁止转向的Activity配置中加入 android:screen ...
 - System Generator入门
			
System generator 安装之后会在Simulin模块库中添加一些Xilinx FPGA专用的模块库,包括Basic Element,Communication,Control Logi ...
 - 已成功与服务器建立连接,但是在登录前的握手期间发生错误。 (provider: SSL Provider, error: 0 - 等待的操作过时)
			
今天忽然间发现远程连接别人数据库会出现 已成功与服务器建立连接,但是在登录前的握手期间发生错误. (provider: SSL Provider, error: 0 - 等待的操作过时) 这种情况 ...
 - js  倒计时 倒计时60秒
			
<input type="button" id="btn" value="免费获取验证码" onclick="settime ...
 - Java IO流详尽解析
			
流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
 - centos5.4下mysql主从复制
			
centos5.4下mysql主从复制配置分享. 本文转自:http://www.jbxue.com/article/771.html 安装环境:centos 5.4 mysql版本:mysql 5. ...
 - windows不能在本地计算机启动apache
			
今天,配置eclipse PHP studio 3.0的时候更改了apache http server 中的httpd.conf文件: 将DocumentRoot 的路径设错了,为一个不存在目录 .更 ...
 - Optimize str2date function
			
The job can be any string date format convert to AX date format. so that, Do not need to specify str ...
 - MySQL 5.6.26源码安装
			
5.6.26源码安装包:http://pan.baidu.com/s/1kUl44WRcmake安装包链接:http://pan.baidu.com/s/1c0LuwJA 操作系统版本:CentOS ...