bzoj 1008 越狱
题目大意:
监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种
如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱
思路:
根据推理可知不越狱的情况为m*(m-1)n 所以答案为mn-m*(m-1)n
使用快速幂
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<iomanip> 7 #include<cstdlib> 8 #include<vector> 9 #include<queue> 10 #define mod 100003 11 #define ll long long 12 using namespace std; 13 ll n,m; 14 ll POW(ll a,ll b) 15 { 16 ll p=1; 17 a%=mod; 18 while(b) 19 { 20 if(b&1) p=p*a%mod; 21 a=a*a%mod;b>>=1; 22 } 23 return p; 24 } 25 int main() 26 { 27 scanf("%lld%lld",&m,&n); 28 printf("%lld",(POW(m,n)%mod-m%mod*POW(m-1,n-1)%mod+mod)%mod); 29 }