AmazingCounters.com

HNOI2008越狱(BZOJ1008)

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1008

 

1008: [HNOI2008]越狱

Time Limit: 1 Sec  Memory Limit: 162 MB

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)

 

HNOI送分题。。已吓傻。。

 

Codes:

 1 #include<set>
 2 #include<queue>
 3 #include<cstdio>
 4 #include<cstdlib>
 5 #include<cstring>
 6 #include<iostream>
 7 #include<algorithm>
 8 using namespace std;
 9 const int Mod = 100003;
10 #define For(i,n) for(int i=1;i<=n;i++)
11 #define Rep(i,l,r) for(int i=l;i<=r;i++)
12  
13 long long m,n;
14  
15 long long Cal(long long a,long long b){
16     long long Ans = 1;
17     while(b){
18         if(b&1) Ans = (Ans * a) % Mod;
19         a = (a * a) % Mod;
20         b = b >> 1;
21     }
22     return Ans%Mod;
23 }
24  
25 int main(){
26     cin>>m>>n;
27     printf("%d\n",( Cal(m,n) - ( Cal(m-1,n-1) * (m%Mod) ) % Mod + Mod) % Mod);
28     return 0;
29 }

 

posted @ 2014-08-14 21:01  ZJDx1998  阅读(78)  评论(0编辑  收藏