BZOJ 1008 [HNOI2008]越獄 (組合數 簡單公式)

_TCgogogo_發表於2015-09-15


[HNOI2008]越獄

Time Limit: 1 Sec  Memory Limit: 162 MB
Submit: 5714  Solved: 2439
[Submit][Status][Discuss]

Description

監獄有連續編號為1...N的N個房間,每個房間關押一個犯人,有M種宗教,每個犯人可能信仰其中一種。如果相鄰房間的犯人的宗教相同,就可能發生越獄,求有多少種狀態可能發生越獄

Input

輸入兩個整數M,N.1<=M<=10^8,1<=N<=10^12

Output

可能越獄的狀態數,模100003取餘

Sample Input

2 3

Sample Output

6

HINT

6種狀態為(000)(001)(011)(100)(110)(111)


題目連結:http://www.lydsy.com/JudgeOnline/problem.php?id=1008


題目分析:首先題意不明確,應該是每個犯人都會信仰其中的一種,然後問題就簡單了,拿總的可能減去相鄰房間宗教不同的狀態即可,第一個房間有m種選擇,後面的n-1個房間的罪犯因為要與前一個不同都只有m-1種選擇,問題解決

#include <cstdio>
#define ll long long
int const MOD = 100003;
 
ll qpow(ll x, ll n)
{
    ll ans = 1;
    while(n)
    {
        if(n & 1)
            ans = (ans * x) % MOD;
        x = (x * x) % MOD;
        n >>= 1;
    }
    return ans;
}
 
int main()
{
    ll m, n;
    scanf("%lld %lld", &m, &n);
    printf("%lld\n", (MOD + qpow(m, n) % MOD - m * qpow(m - 1, n - 1) % MOD) % MOD);
}



相關文章