bzoj1008 / P3197 [HNOI2008]越狱

P3197 [HNOI2008]越狱

考虑所有状况:显然是$m^{n}$

考虑所有不合法状况:

显然相邻两个数不相等

那么后面$n-1$个数就有$(m-1)^{n-1}$种取法

第一个数前面没有相邻的,那么就有$m$种取法

∴不合法状况有$m*(m-1)^{n-1}$种

∴$ans=m^{n}-m*(m-1)^{n-1}$

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #define re register
 5 using namespace std;
 6 typedef long long ll;
 7 const int mod=1e5+3;
 8 ll m,n;
 9 ll ksm(ll x,ll y){
10     ll res=1;
11     for(;y;y>>=1){
12         if(y&1)res=res*x%mod;
13         x=x*x%mod;
14     }return res;
15 }
16 int main(){
17     scanf("%lld%lld",&m,&n);
18     printf("%lld",(ksm(m,n)-m%mod*ksm(m-1,n-1)%mod+mod)%mod);
19     return 0;
20 }
View Code

 

posted @ 2018-10-31 15:23  kafuuchino  阅读(110)  评论(0编辑  收藏  举报