[BZOJ1008] [HNOI2008] 越狱 (数学)
Posted CtrlCV
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[BZOJ1008] [HNOI2008] 越狱 (数学)相关的知识,希望对你有一定的参考价值。
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)
Source
Solution
答案 = 总可能数 - 不越狱的可能数
= m^n - m * (m-1)^(n-1)
1 #include <cstdio> 2 #define MOD 100003 3 using namespace std; 4 typedef long long ll; 5 ll m, n; 6 7 int ksm(ll a, ll b) 8 { 9 ll c = 1, d = a % MOD; 10 while(b) 11 { 12 if(b & 1) 13 c = c * d % MOD; 14 b >>= 1; 15 d = d * d % MOD; 16 } 17 return c; 18 } 19 20 int main() 21 { 22 scanf("%lld %lld", &m, &n); 23 ll ans = ksm(m, n); 24 ans -= m * ksm(m - 1 ,n - 1) % MOD; 25 while(ans < 0) ans += MOD; 26 printf("%lld", ans); 27 return 0; 28 }
以上是关于[BZOJ1008] [HNOI2008] 越狱 (数学)的主要内容,如果未能解决你的问题,请参考以下文章