题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1008
容斥,方案数=总方案数-相邻互不相同的方案数,方案数利用乘法原理计算
ans=m^n+m*(m-1)^(n-1)
贴代码
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
const ll P=100003;
ll n,m,ans,x,y;
ll power(ll a,ll b){
ll s,x;
s=1;x=a%P;
while (b!=0){
if (b%2==1) s=s*x%P;
x=x*x%P;
b=b>>1;
}
return s;
}
int main(){
// freopen("1008.in","r",stdin);
// freopen("1008.out","w",stdout);
scanf("%lld%lld",&m,&n);
x=power(m,n);
y=power(m-1,n-1)*m%P;
ans=(x-y+P)%P;
printf("%lld",ans);
return 0;
}
【写的有漏洞的,欢迎路过大神吐槽】
2016/12/29 22:24:43
Ending.