[HNOI2008]越獄
阿新 • • 發佈:2017-07-02
ans 整數 size ostream namespace iostream 輸入輸出格式 ret hnoi
題目描述
監獄有連續編號為1...N的N個房間,每個房間關押一個犯人,有M種宗教,每個犯人可能信仰其中一種。如果相鄰房間的犯人的宗教相同,就可能發生越獄,求有多少種狀態可能發生越獄
輸入輸出格式
輸入格式:
輸入兩個整數M,N.1<=M<=10^8,1<=N<=10^12
輸出格式:
可能越獄的狀態數,模100003取余
輸入輸出樣例
輸入樣例#1:2 3輸出樣例#1:
6
說明
6種狀態為(000)(001)(011)(100)(110)(111)
簡單到不像省選題,原本打算用半小時,結果只用了5分鐘
所有狀態m^n,不符合條件的狀態:
第一個有m種選擇,接下來n-1個為(m-1)種,所以總數:m*(m-1)^(n-1)
ans=m^n-m*(m-1)^(n-1)
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 using namespace std; 6 int p=100003; 7 long long ans1,ans2; 8 long long qpow(long long x,long long m) 9 { 10 if (m==0) return 1; 11 long long tmp=qpow(x,m/2);12 tmp=(tmp*tmp)%p; 13 if (m%2==1) tmp=(tmp*x)%p; 14 return tmp; 15 } 16 int main() 17 {long long m,n; 18 cin>>m>>n; 19 ans1=qpow(m,n); 20 ans2=(m*qpow(m-1,n-1))%p; 21 cout<<(ans1-ans2+p)%p; 22 }
[HNOI2008]越獄