[hnoi2008]越狱(bzoj1008)

思路

计算总状态数和不越狱的状态数之差。

总状态数为$M*N$,不越狱的状态数为$M∗(M−1)^{N−1}$。

用到快速幂。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

using namespace std;
typedef long long ll;
ll (ll a, ll b, ll n){
ll ret = 1;
while(b){
if(b & 1) ret = ret a % n;
a = a
a % n;

b >>= 1;
}
return ret;
}
int main(){
ll m, n;
ll mod = 100003;
cin >> m >> n;
ll tmp = pow(m, n, mod)%mod - m*pow(m-1, n-1, mod)%mod;
cout << (tmp+mod)%mod << endl;
return 0;
}

一开始没过,因为没有 $(tmp + mod) mod mod$ 这段,而是直接输出tmp了,这样会溢出。