bzoj1008: [HNOI2008]越狱 数学公式+快速幂
bzoj1008: [HNOI2008]越狱 O(log N)
-----------------------------------------------------------------------------------------------------------------------------------------
监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱
-----------------------------------------------------------------------------------------------------------------------------------------
输入两个整数M,N.1<=M<=10^8,1<=N<=10^12
-----------------------------------------------------------------------------------------------------------------------------------------
可能越狱的状态数,模100003取余
-----------------------------------------------------------------------------------------------------------------------------------------
Sample Input 2 3
Sample Output 6
-----------------------------------------------------------------------------------------------------------------------------------------
HINT 6种状态为(000)(001)(011)(100)(110)(111)
考察到 N , M 数据范围极大,甚至 递推 或 1..M 或 1..N 的操作都不行。
考虑本题是否可以推导 O(1) 或 O(log N)数学公式
观察到每个房间中的囚犯可能信仰1..M中任意一个宗教,于是得到 总共会有 M^N 种状态
又发现如果正向推导十分困难,于是考虑 逆向思维 ,推导共有多少种状态不会越狱,
可以看到第一位囚犯可能信仰 M 种宗教,而后的每一种因前面有一位罪犯信仰某一宗教而受限制,
因此只有 M-1 种选择,故 不会越狱的状态数为 M*(M-1)^(N-1) 种
综上所述,可以看出本题的 可能越狱的状态数为 ( M^N - M*(M-1)^(N-1) ) % 100003
再使用快速幂对公式加速可以将 O(N)加速到 O(log N)
#include<iostream>
#include<cstdio>
using namespace std; typedef long long ll;
const ll mod=1e5+;
ll n,m; ll mod_pow(ll n,ll m){ //快速幂
ll ret=;
while (m>){
if (m&) (ret*=n)%=mod;
(n*=n)%=mod;
m>>=;
}
return ret;
} int main(){
scanf("%lld%lld",&m,&n);
ll ans=mod_pow(m,n)-m*mod_pow(m-,n-)%mod; //公式
ans%=mod;
printf("%lld\n",(ans+mod)%mod); // 为防止ans为负数,对 ans+mod 再%mod,保证 ans 为正
return ;
}
bzoj1008: [HNOI2008]越狱 数学公式+快速幂的更多相关文章
- [bzoj1008](HNOI2008)越狱(矩阵快速幂加速递推)
Description 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 In ...
- 【BZOJ】1008: [HNOI2008]越狱(快速幂)
http://www.lydsy.com/JudgeOnline/problem.php?id=1008 刚开始看不会做啊,以为是dp,但是数据太大!!!所以一定有log的算法或者O1的算法,,,,还 ...
- 1008. [HNOI2008]越狱【快速幂】
Description 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果 相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 I ...
- HNOI2008越狱(快速幂)
快速幂水过,贴一下模版. ; var x,y,n,m:int64; function power(num,times:int64):int64; var temp:int64; begin then ...
- BZOJ1008: [HNOI2008]越狱-快速幂+取模
1008: [HNOI2008]越狱 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 8689 Solved: 3748 Description 监狱有 ...
- BZOJ1008 [HNOI2008]越狱 快速幂
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1008 题意概括 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可 ...
- 【数论】【快速幂】bzoj1008 [HNOI2008]越狱
根据 高中的数学知识 即可推出 ans=m^n-m*(m-1)^(n-1) .快速幂取模搞一下即可. #include<cstdio> using namespace std; typed ...
- BZOJ-1008 越狱 数论快速幂
1008: [HNOI2008]越狱 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 6192 Solved: 2636 [Submit][Status] ...
- bzoj1008 [HNOI2008]越狱
1008: [HNOI2008]越狱 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5099 Solved: 2207 Description 监狱有 ...
随机推荐
- java中怎么把String转化为字符数组呢?
我想让用户输入一组字符串,然后将这个字符串的每一个赋给一个char.即,abcde char ch[]=new char[5]; ch[0]=a;ch[1]=b;..... 解决方案如下图所示: St ...
- Luogu 3625 [APIO2009]采油区域
想了很久的dp,看了一眼题解之后感觉自己被安排了. 发现从一个矩形中选择三个不相交的正方形一共只有六种取法. 那么我们可以处理出四个值: $f_{i, j}$分别表示以$(i, j)$为右下角,左下角 ...
- javascript字符串 转 驼峰字符
字符串 转 驼峰字符 <script type="text/javascript"> var str = 'peng-hui-datou'; function a( ...
- ObjectARX环境搭建之vs2010+objectArx2012+AutoCAD2012
---------------------------------------------------------------------------------------------------- ...
- ServletContext接口(六)
javax.servlet.ServletContext接口 ServletContext(上下文)是公用的,就是.net中的application,主要用到的就是全局set设置值,get获取值,ja ...
- SQL 分组后拼接字符串
with t as( select 'Charles' parent, 'William' child union select 'Charles', 'Harry' union select 'An ...
- framwork maven的配置及使用
maven的配置及使用 一.什么是maven: 我们在开发项目的过程中,会使用一些开源框架.第三方的工具等等,这些都是以jar包的方式被项目所引用,并且有些jar包还会依赖其他的jar包,我们同样需要 ...
- 混合APP开发-hybrid 升级流程
本文来自网易云社区 作者:王贝 目前大多数APP已经应用hybrid进混合开发,这不,我们的gacha APP这个版本已经开始使用hybrid来开发了,hybrid的优势这里就不多说了,这里主要讲一下 ...
- linux通配符与基础正则
1.特殊符号: ' ' 单引号 单引号的内容 写什么就是什么,不会被当成特殊字符. 单引号实例: [root@oldboyedu-sh01 ~] ...
- Android下创建一个输入法
输入法是一种可以让用户输入文字的控件.Android提供了一套可扩展的输入法框架,使得应用程序可以让用户选择各种类型的输入法,比如基于触屏的键盘输入或者基于语音.当安装了特定输入法之后,用户即可在系统 ...