bzoj1008 / P3197 [HNOI2008]越狱
考虑所有状况:显然是$m^{n}$
考虑所有不合法状况:
显然相邻两个数不相等
那么后面$n-1$个数就有$(m-1)^{n-1}$种取法
第一个数前面没有相邻的,那么就有$m$种取法
∴不合法状况有$m*(m-1)^{n-1}$种
∴$ans=m^{n}-m*(m-1)^{n-1}$
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }