1. 程式人生 > >[bzoj1008] [HNOI2008]越獄

[bzoj1008] [HNOI2008]越獄

digi write -i 就是 取余 相同 its ++ tchar

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

Solution

總方案數減去不可越獄的方案數即可。

答案就是:
\[ ans=m^n-m\cdot (m-1)^{n-1} \]

#include<bits/stdc++.h>
using namespace std;

#define int long long 

void read(int &x) {
    x=0;int f=1;char ch=getchar();
    for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f;
    for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f;
}

#define write(x) printf("%d\n",x)

const int maxn = 2e5+10;
const int mod = 100003;

int n,m;

int qpow(int a,int x) {
    int res=1;a%=mod;
    for(;x;x>>=1,a=a*a%mod) if(x&1) res=res*a%mod;
    return res;
}

signed main() {
    read(m),read(n);
    write((qpow(m,n)-m%mod*qpow(m-1,n-1)%mod+mod)%mod);
    return 0;
}

[bzoj1008] [HNOI2008]越獄