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;
}
View Code
posted @ 2017-02-16 20:44  v9fly  阅读(92)  评论(0编辑  收藏