BZOJ 1008 越狱
2015-07-24 11:27
274 查看
Description
监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱Input
输入两个整数M,N.1<=M<=10^8,1<=N<=10^12Output
可能越狱的状态数,模100003取余Sample Input
2 3Sample Output
6HINT
6种状态为(000)(001)(011)(100)(110)(111)Source
直接求显然不好求,思路转化一下显然有两种情况,能越狱的和不能越狱的(废话ing
既然能越狱的不好求,那么考虑一下不能越狱的
总数是m^n显然
第一个人有m种可能,因为不能越狱
第二个人有(m-1)种可能
第三个人有(m-1)中可能。。。
那么根据乘法原理得不能越狱的为m*(m-1)^(n-1)
所以能越狱的用总数一减即可
这么水的题目也WA了一次,快速幂传参居然传了个int 我也是蠢哭。。
另外注意下mod的减法,要考虑到减后是负数的情况
代码如下:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstdlib>
using namespace std;
const int mod=100003;
typedef long long LL;
LL n,m,a,tmp,ans;
void pow_mod(LL x){
if(x==0){ans=1;return;}
if(x==1){ans=a;return;}
pow_mod(x>>1);
ans=(ans*ans)%mod;
if(x&1)ans=(ans*a)%mod;return;
}
int main(){
scanf("%lld%lld",&m,&n);
a=m%mod;pow_mod(n);
tmp=ans;
a=(m-1)%mod;pow_mod(n-1);
ans=(ans*m)%mod;
ans=(tmp-ans+mod)%mod;
printf("%lld\n",ans);
return 0;
}
相关文章推荐
- 使用Dropzone上传图片及回显示例
- tcpdump非常实用的抓包实例
- 简单的游戏逻辑,用C++ console来实现简单的逻辑
- 一种基于Storm的可扩展即时数据处理架构思考
- 3.4——从无头单链表中删除结点
- C++对象模型4--有重写的单继承
- Myeclipse导出jar文件图片路径问题
- hello-win程序入门win32基本窗口框架全解析
- linux添加交换分区swap增加虚拟内存
- 为什么要使用NSURLSession
- Algorithms—25.Reverse Nodes in k-Group
- C++中的数组指针与数组引用
- .net Event/Delegate Simple Demo
- 从中国移动走出去的咪咕能成功吗?
- Python version 2.7 required, which was not found in the registry
- Linux 运维笔记
- 带你走进spring的世界
- Myeclispse导出带图片的jar生成exe(1)
- MyBatis学习系列二:单表查询一
- zookeeper会话超时