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;
}