您的位置:首页 > 其它

bzoj 1008 越狱 组合数+快速幂

2014-12-27 21:12 239 查看

bzoj 1008 越狱

点击打开链接

题目描述

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

输入

输入两个整数M,N.1<=M<=10^8,1<=N<=10^12

输出

可能越狱状态数,模100003取余

样例输入

2 3

样例输出

6

数学题,先求不越狱的状态数:
第1间有某种,其余n-1间有m-1种;
ans=m^n-m*(m-1)^n-1;

#include<cstdio>
#define MOD 100003
using namespace std;
long long  fsm(const long long  t,const long long  d)
{
long long m=t,n=d;

m%=MOD;
long long b=1;
while(n>0)
{
if(n&1)
b=(b*m)%MOD;
n=n>>1;
m=(m*m)%MOD;
}
return b;
}

int main()
{
long long m,n;
scanf("%lld%lld",&m,&n);
printf("%lld",(fsm(m,n)+MOD-(fsm(m-1,n-1)*(m)%MOD))%MOD);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: