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 监狱有 ...
随机推荐
- PCL—关键点检测(iss&Trajkovic)低层次点云处理
博客转载自:http://www.cnblogs.com/ironstark/p/5069311.html 关键点检测往往需要和特征提取联合在一起,关键点检测的一个重要性质就是旋转不变性,也就是说,物 ...
- 高性能MySQL笔记-第4章Optimizing Schema and Data Types
1.Good schema design is pretty universal, but of course MySQL has special implementation details to ...
- python3-函数的参数的四种简单用法:
def print_two(*args): arg1, arg2 = args print "arg1: %r, arg2: %r" % (arg1,arg2) ...
- C#关于如何修改项目文件夹名称
在C# 中修改了解决方案项目名称之后,重命名之后出现错误形式: 解决方法就是 打开你的sln文件 ,将里面的地址改过来就好了 以记事本的方式打开.sln文件 修改其中的相对路径,下图选中部分的路径,这 ...
- [转]delphi xe6 android屏幕操持常亮
1) setting the Project Options, Uses Permissions, Wake lock = True 2) Adding Android.JNI.PowerManage ...
- linux 进程间通信机制(IPC机制)一总览
1.作用:进程间通信机制(Inter Process Communication,IPC),这些IPC机制的存在使UNIX在进程通信领域手段相当丰富,也使得程序员在开发一个由多个进程协作的任务组成的系 ...
- ubuntu安装软件-笔记
手动安装过程 下载 - 配置文件 常用命令: sudo dpkg -i ******.deb 问题&解决思路 问题1:依赖项 - 缺少某一个依赖包 解决尝试: 1 . sudo apt-ge ...
- 利用Angular2的Observables实现交互控制
在Angular1.x中,我们使用Promise来处理各种异步.但是在angular2中,使用的是Reactive Extensions (Rx)的Observable.对于Promise和Obser ...
- jQuery回车触发事件
举例: 需求:要求回车触发下一步 Html部分 <div style="margin-top: 25px;"> <a href="#" cla ...
- Linux系统磁盘
所有有系统都一样,都是一种软件被安装于某个硬件之上,这个硬件无外非是一种存储设备,通常操作系统都是安装在磁盘中,所以Linux系统也是一样,都是安装在磁盘中,但是它与Windows系统不一样,因为Li ...