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]越狱 数学公式+快速幂的更多相关文章

  1. [bzoj1008](HNOI2008)越狱(矩阵快速幂加速递推)

    Description 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 In ...

  2. 【BZOJ】1008: [HNOI2008]越狱(快速幂)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1008 刚开始看不会做啊,以为是dp,但是数据太大!!!所以一定有log的算法或者O1的算法,,,,还 ...

  3. 1008. [HNOI2008]越狱【快速幂】

    Description 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果 相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 I ...

  4. HNOI2008越狱(快速幂)

    快速幂水过,贴一下模版. ; var x,y,n,m:int64; function power(num,times:int64):int64; var temp:int64; begin then ...

  5. BZOJ1008: [HNOI2008]越狱-快速幂+取模

    1008: [HNOI2008]越狱 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 8689  Solved: 3748 Description 监狱有 ...

  6. BZOJ1008 [HNOI2008]越狱 快速幂

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1008 题意概括 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可 ...

  7. 【数论】【快速幂】bzoj1008 [HNOI2008]越狱

    根据 高中的数学知识 即可推出 ans=m^n-m*(m-1)^(n-1) .快速幂取模搞一下即可. #include<cstdio> using namespace std; typed ...

  8. BZOJ-1008 越狱 数论快速幂

    1008: [HNOI2008]越狱 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 6192 Solved: 2636 [Submit][Status] ...

  9. bzoj1008 [HNOI2008]越狱

    1008: [HNOI2008]越狱 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 5099  Solved: 2207 Description 监狱有 ...

随机推荐

  1. Java-马士兵设计模式学习笔记-工厂模式-简单工厂

    一.概述 1.目标:要控制任意类型交通工具的生产模式 2.目标有两层意思(1)任意类型 (2)生产模式,所以对应的,要这两个层面上抽象(Movable,VehicleFactory),利用接口,实现多 ...

  2. Entity Framework Tutorial Basics(24):Update Single Entity

    Update Existing Entity using DBContext in Disconnected Scenario: In this chapter, you will learn how ...

  3. TinkerPop中的遍历:图的遍历步骤(1/3)

    图遍历步骤(Graph Traversal Steps) 在最一般的层次上,Traversal<S,E>实现了Iterator,S代表起点,E代表结束.遍历由四个主要组成部分组成: Ste ...

  4. const char *p; char const *p; char * const p的区别

    请看下面三种定义: const char *p; char const *p; char * const p; 首先看第一种,我们先看p,本着”从里往外”的原则,p是一个char *类型的变量,但ch ...

  5. C++11新标准:auto关键字

    一.auto意义 编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型,然后要做到这一点并非那么容易.为了解决这个问题,C++11新标准引入了auto类型说明符,用它就能 ...

  6. 预编译对象解决SQL注入问题

  7. 关于Android Studio中第三方jar包的Javadoc绑定

    原文地址:http://blog.csdn.net/a739697044/article/details/28116189   现在刚开始从Eclipse转用Android Studio,现在在尝试使 ...

  8. Puppeteer入门初探

    本文来自网易云社区 作者:唐钊 最近在看 node 爬虫相关的一些东西,我记得还是很久以前常用的 node 爬虫工具还是 superagengt+cherrio,他们的思路是通过发起 http 请求然 ...

  9. R-CNN

    标题:<Rich feature hierarchies for accurate object detection and semantic segmentation> 时间:2014 ...

  10. Django之博客系统邮件分享博客

    在上一章中,我们创建了一个基础的博客应用,我们能在http://127.0.0.1:8000/blog/显示我们的博客.在这一章我们将尝试给博客系统添加一些高级的特性,比如通过email来分享帖子,添 ...