BZOJ1008 [HNOI2008]越狱
2015-10-14 20:32
204 查看
1008: [HNOI2008]越狱
Time Limit: 1 Sec Memory Limit: 162 MB
Submit: 5846 Solved: 2494
[Submit][Status][Discuss]
Description
监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱
Input
输入两个整数M,N.1<=M<=10^8,1<=N<=10^12
Output
可能越狱的状态数,模100003取余
Sample Input
2 3
Sample Output
6
HINT
6种状态为(000)(001)(011)(100)(110)(111)
Source
【思路】
数学+快速幂。
一共有m^n中情况,去掉其中任意相邻两个都相等的情况:m*(m-1)^(n-1)即为解。
需要注意的是ans=m^n-m*(m-1)^(n-1),ans如果为负则加MOD直到为正。
【代码】
Time Limit: 1 Sec Memory Limit: 162 MB
Submit: 5846 Solved: 2494
[Submit][Status][Discuss]
Description
监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱
Input
输入两个整数M,N.1<=M<=10^8,1<=N<=10^12
Output
可能越狱的状态数,模100003取余
Sample Input
2 3
Sample Output
6
HINT
6种状态为(000)(001)(011)(100)(110)(111)
Source
【思路】
数学+快速幂。
一共有m^n中情况,去掉其中任意相邻两个都相等的情况:m*(m-1)^(n-1)即为解。
需要注意的是ans=m^n-m*(m-1)^(n-1),ans如果为负则加MOD直到为正。
【代码】
#include<iostream> using namespace std; const int MOD=100003; typedef long long LL; LL n,m; inline LL pow(LL x,LL p) { LL tmp=x,ans=1; while(p) { if(p&1) ans=(ans*tmp)%MOD; tmp=(tmp*tmp)%MOD; p>>=1; } return ans; } int main() { cin>>m>>n; LL ans; LL a1=pow(m,n),a2=pow(m-1,n-1); ans=(a1-m*a2 +MOD) %MOD; while(ans<0) ans += MOD; cout<<ans; return 0; }
相关文章推荐
- Android开发者指南-摄像头-Camera
- 小笔记)自定义的activity样式宽度不能充满父窗体
- W3C标准
- Python操作MySQL数据库示例
- 除了xlog,哪些操作可能还需要fsync ?
- 从头认识java-1.2 对象-服务提供者
- PopupWindow
- IOS网络笔记--图片上传服务器Demo
- 从头认识java-1.2 对象-服务提供者
- 转:各类职位的简写及中英对照
- 黑马程序员——面向对象
- postman指定User-Agent的header无效
- lintcode-快速幂-125
- [转]MySQL 调优/优化的 100 个建议
- Tomcat Gzip配置
- Android handler机制的原理
- 添加Aop声明式事务处理java.lang.NoSuchMethodError: org.springframework.util.ClassUtils.isUserLevelMethod
- [PAT (Advanced Level) ]1007. Maximum Subsequence Sum 解题文档
- OnMeasure方法详解
- Jackson