标签:
直接考虑有多少种状态可能发生越狱比较困难,那么可以考虑求出有多少种状态不可能发生越狱。
很显然,有m*(m-1)^(n-1)种状态不会发生越狱。因为第一个房间有m种选择,而第二个房间为了不与第一个房间冲突就只有m-1种选择了,以此类推可以用乘法原理得到这个式子。
我们还可以求出状态的总数,每个房间都有m种选择,共有n个房间,则根据乘法原理状态总数显然是m^n。
最后答案ans=状态总数-不会发生越狱的状态总数=m^n-m*(m-1)^(n-1)
1 #include <cstdio> 2 #include <iostream> 3 4 using namespace std; 5 6 const unsigned long long int MOD(100003ULL); 7 8 unsigned long long int M, N; 9 unsigned long long int A, B; 10 11 unsigned long long int power(const unsigned long long int &p, const unsigned long long int &k) 12 { 13 if (k == 0ULL) 14 return 1ULL; 15 if (k == 1ULL) 16 return p % MOD; 17 unsigned long long int re = power(p, (k >> 1ULL)); 18 if (k & 1ULL) 19 return (((re * re) % MOD) * (p % MOD)) % MOD; 20 else 21 return (re * re) % MOD; 22 } 23 24 int main() 25 { 26 cin >> M >> N; 27 28 A = power(M, N); 29 B = (M * power(M - 1, N - 1)) % MOD; 30 cout << (A + MOD - B) % MOD << endl; 31 32 return 0; 33 }
标签:
原文地址:http://www.cnblogs.com/Created-equal/p/5021812.html