[BZOJ1008][HNOI2008]越獄 組合數學
阿新 • • 發佈:2017-08-29
-m 合數 nbsp d+ mil 組合數 turn sca ans
正著直接算有點難,我們考慮反著來,用全集減補集。
總的方案數為$m^n$。第一個人有$m$種可能,第二個人有$m-1$種可能,第三個人有$m-1$種可能……發現補集就是$m*(m-1)^{n-1}$。用快速冪搞搞就行了。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 typedef long long ll; 6 const int mod=100003; 7 int quick_pow(int x,ll y){ 8 intbase=x,sum=1; 9 while(y){ 10 if(y&1) sum=(ll)sum*base%mod; 11 base=(ll)base*base%mod; 12 y>>=1; 13 } 14 return sum; 15 } 16 int main(){ 17 ll n,m; 18 scanf("%lld%lld",&m,&n); 19 m%=mod; 20 printf("%d\n",(quick_pow(m,n)-m%mod*quick_pow(m-1,n-1)%mod+mod)%mod); 21 return 0; 22 }
[BZOJ1008][HNOI2008]越獄 組合數學