码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ 1008 [HNOI2008]越狱

时间:2015-12-05 17:39:49      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

直接考虑有多少种状态可能发生越狱比较困难,那么可以考虑求出有多少种状态不可能发生越狱。

很显然,有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 }
BZOJ 1008

 

BZOJ 1008 [HNOI2008]越狱

标签:

原文地址:http://www.cnblogs.com/Created-equal/p/5021812.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!