「HNOI 2008」越狱

题目链接

戳我

\(Solution\)

正难则反,这道题直接做有点困难,但我们可以反过来思考我们可以用总方案数减去不可以越狱的方案数

  • 首先来算总方案数:
    对于每个房间的人都有\(M\)种宗教可以选,那么共有\(M^N\)种方案
  • 再来看看不可以越狱的方案数:
    对于第一个房间可以选\(M\)种宗教.对于第\(2\)~\(N\)个房间每个房间选的宗教要和前面的不同,所以可以选\(M-1\)种宗教,所以共有\(M*(M-1)^{N-1}\)

所以答案就是:

\[M^N-M*(M-1)^{N-1} \]

\(Code\)

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=100003;
int read(){
    int x=0,f=1;char c=getchar();
    while(c<'0'||c>'9') f=(c=='-')?-1:1,c=getchar();
    while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
    return x*f;
}
int ksm(int a,int b){
	int ans=1;
	while(b){
		if(b&1)
			ans=ans*a%mod;
		a=a*a%mod;
		b>>=1;
	}
	return ans;
}
main(){
	int m=read(),n=read();
	printf("%lld",(ksm(m,n)-m*ksm(m-1,n-1)%mod+mod)%mod);
}

posted @ 2019-01-23 15:31  撤云  阅读(217)  评论(0编辑  收藏  举报
……