题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1008
题解:
我们可以用捆绑法直接求人数,但是容易TLE。
但是我们也可以逆向的求出总人数以及不会有相同宗教的人爱在一起的方案,做差就是答案。
总方案数即m^n(每个人都有 m 个宗教可以选择)
不会有相同宗教的人挨在一起的方案有:m*(m-1)^(n-1)
做差即可。
代码:
#include <cstdio>
const int mod = 100003;
typedef long long LL;
LL n, m;
LL mdPw(LL a, LL b) {
if(!b) return 0LL;
if(b == 1LL) return a%mod;
LL half = mdPw(a, b/2);
if(b&1) return half%mod*half%mod*a%mod;
else return half%mod*half%mod;
}
int main() {
scanf("%lld %lld", &m, &n);
printf("%lld\n", (mdPw(m, n)%mod-m*mdPw(m-1, n-1)%mod+mod)%mod);
return 0;
}