bzoj 1008: [HNOI2008]越狱 数学
1008: [HNOI2008]越狱
Time Limit: 1 Sec Memory Limit: 162 MB[Submit][Status][Discuss]
Description
监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种。如果
相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱
Input
输入两个整数M,N.1<=M<=10^8,1<=N<=10^12
Output
可能越狱的状态数,模100003取余
Sample Input
2 3
Sample Output
6
HINT
6种状态为(000)(001)(011)(100)(110)(111)
显然:总共M^N的方案;
不能越狱的方案即M*(M-1)^(N-1);
第一个有M种,后面全是M-1种;
#include<bits/stdc++.h> using namespace std; #define ll long long #define pi (4*atan(1.0)) const int N=1e5+10,M=4e6+10,inf=1e9+10; const ll INF=1e18+10; ll quickpow(ll a,ll b,ll mod) { ll sum=1; while(b) { if(b&1) { sum*=a; sum%=mod; } b>>=1; a*=a; a%=mod; } return sum; } int main() { ll x,y,z,i,t; while(~scanf("%lld%lld",&x,&y)) { ll ans=quickpow(x,y,100003LL)-x*quickpow(x-1,y-1,100003LL); printf("%lld\n",((ans%100003)+100003)%100003); } return 0; }