BZOJ 1008 组合数学,快速幂,水
1008: [HNOI2008]越狱
题意:监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱。
tags:发生越狱=总情况 - 不发生越狱。即m^n - m*(m-1)^(n-1)。
#include<bits/stdc++.h> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define FF(i,a,b) for (int i=a;i<=b;i++) #define F(i,b,a) for (int i=b;i>=a;i--) #define mes(a,b) memset(a,b,sizeof(a)) #define INF 0x3f3f3f3f typedef long long ll; const int N = 2e5+10, mod=100003; ll m, n; ll powmod(ll a, ll b) { ll s=1; while(b) { if(b&1) s=(s*a)%mod; a=(a*a)%mod; b>>=1; } return s ; } int main() { scanf("%lld %lld", &m, &n); printf("%lld\n", (powmod(m, n)- (m*powmod(m-1, n-1)%mod) +mod )%mod); return 0; }