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 }
View Code

 

posted @ 2017-11-28 15:25  jack_yyc  阅读(137)  评论(0编辑  收藏  举报