1. 程式人生 > >BZOJ 1008 越獄題解

BZOJ 1008 越獄題解

bzoj mat names ans 由於 cin text namespace def

其實這題很水,顯然n個房間有m種宗教,總共有n^m種情況,

我們再考慮不合法的情況,顯然第一個房間有m種情況,而後一種只有m-1種情況(因為不能相同)

所以不合法的情況有(m-1)^(n-1)*m種情況,相減即是答案。

註意一下實現的細節,由於n和m可能很大,模運算時要註意一下(血的教訓)

# include<iostream>
# include<cstdio>
# include<cmath>
using namespace std;
const long long mod = 100003;
typedef long long LL;
LL qpow(LL a,LL b)
{
    
if(b==0) return 1; LL ans=1,base=a; while(b) { if(b&1) ans=(ans%mod)*(base%mod)%mod; base=(base%mod*base%mod)%mod; b>>=1; } return ans%mod; } int main() { LL n,m,ans; cin>>m>>n; ans=qpow(m,n); ans=(ans-((qpow(m-1
,n-1)%mod)*(m%mod)%mod)+mod)%mod; cout<<ans; return 0; }

BZOJ 1008 越獄題解