[luogu3197][越狱]

<a href="https://www.luogu.org/problemnew/show/P3197"target="blank">luogu3197

思路

看了很久没思路,看了题解发现自己好zz。用全部的情况减去不合法的情况就行了。全部的情况就是每个人随便选,总共有\(m^n\)种情况,然后考虑不合法的情况,也就是任意相邻的两个人不能信仰同一宗教,第一个人有m个宗教可以选,后面的每个人因为都不能和前面那个人相同,所以后面的每个人有m-1个宗教可以选。所以最终答案就是\(m^n-m*(m-1)^{n-1}\)

代码

#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll;
const int mod=100003;
ll read() {
                ll x=0, tmp=1;
              char ch=getchar();
           //wxywwwwwwwwwwwwwwwwwwww
         while( (ch<'0') || (ch>'9') ){
        if(ch=='-')tmp=-1; ch=getchar();}
         while( (ch>='0')&&(ch<='9') ){
           x=x*10+ch-'0';ch=getchar();
              }//wxywwwwwwwwwwwwwwww
                return (x*tmp);
}
ll qmi(ll x,ll y) {
	ll ans=1;
	ll now=x;
	while(y) {
		if(y&1) ans=ans*now%mod;
		now=now*now%mod;
		y>>=1;
	}
	return ans;
}
int main() {
	ll m=read();
	ll n=read();
	cout<<(qmi(m,n)%mod-qmi(m-1,n-1)*m%mod+mod)%mod;
	return 0;
}


posted @ 2018-10-11 19:51  wxyww  阅读(152)  评论(0编辑  收藏  举报