bzoj1008[HNOI2008]越獄
阿新 • • 發佈:2018-02-27
inpu clu 它的 long 我們 AC amp led www
傳送門
Description
監獄有連續編號為1...N的N個房間,每個房間關押一個犯人,有M種宗教,每個犯人可能信仰其中一種。如果
相鄰房間的犯人的宗教相同,就可能發生越獄,求有多少種狀態可能發生越獄
Input
輸入兩個整數M,N.1<=M<=10^8,1<=N<=10^12
Output
可能越獄的狀態數,模100003取余
Sample Input
2 3Sample Output
6HINT
6種狀態為(000)(001)(011)(100)(110)(111)
題解:
我們可以從逆向思考,對於每一種宗教,它的下一個位置有m-1種選擇,因此不會越獄的情況有m*(m-1)^(n-1)種,總情況有m^n種,因此會越獄有m^n-m*(m-1)^(n-1)種,用快速冪即可求出答案。
代碼:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstring> 5 #include<algorithm> 6 #include<cmath> 7 #define ll long long 8 #define mo 100003 9 using namespace std; 10 ll m,n,ans; 11 ll qui(ll x,ll t){ 12 ll a=1;x=x%mo; 13 while(t){ 14 if(t&1) a=a*x%mo; 15 x=x*x%mo; 16 t>>=1; 17 } 18 return a; 19 } 20 int main(){ 21 scanf("%lld%lld",&m,&n); 22 ans=qui(m,n); 23 ll k=m*qui(m-1,n-1)%mo; 24 ans-=k; 25 while(ans<0) ans+=mo; 26 ans%=mo; 27 printf("%lld\n",ans); 28 return 0; 29 }
bzoj1008[HNOI2008]越獄