【链接】
bzoj1008
【题目大意】
给你n和M,n表示房间的数量,每个房间有一个犯人,m表示宗教的数量,求相邻房间之间有犯人的宗教相同的方案数。
【解题报告】
因为题目中叫我们求相邻房间之间有犯人的宗教相同的方案数,但是这样思考比较复杂。所以可以逆向思考,求相邻房间之间有犯人的宗教相同的方案数不就是求总方案数减去相邻房间之间犯人的宗教都不相同的方案数吗,这样问题就变简单了。总方案数就是
Mn
,相邻房间之间犯人的宗教都不相同的方案数也就是
M∗(M−1)n−1
(对于第一个犯人他可以信仰任意一个宗教也就是他可以信仰
M
种宗教,而第二个犯人因为不能信仰与一相同的宗教,所以他可以信仰
#include<cstdio>
#define LL long long
using namespace std;
const int tt=100003;
int m;
LL n;
inline LL Read()
{
LL res=0;
char ch=getchar();
while (ch<'0'||ch>'9') ch=getchar();
while (ch>='0'&&ch<='9') res=res*10+ch-48,ch=getchar();
return res;
}
LL Qsm(int a,LL b)
{
LL w=a%tt,sum=1;
while (b)
{
if (b&1) sum=sum*w%tt;
w=(w*w)%tt; b>>=1;
}
return sum;
}
int main()
{
freopen("1008.in","r",stdin);
freopen("1008.out","w",stdout);
m=Read(); n=Read();
printf("%lld",(Qsm(m,n)-m%tt*Qsm(m-1,n-1)%tt+tt)%tt);
return 0;
}