BZOJ 1008: [HNOI2008]越狱

Fancy posted @ 2015年7月13日 23:10 in BZOJ , 295 阅读

题目大意:监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱。

好吧这是个数学题。。。

一共有m^n种情况,因为n个人,每个人m种情况,乘法原理,m个n相乘。

不能越狱的有m*(m-1)^(n-1)种情况,因为第一个人随便选,m种;后面的每个人只要不和上一个人一样就行了,还有(n-1)个人,每个人(m-1)种情况。

然后越狱的=总共的-不越狱的

#include<iostream>
#include<cstdio>
using namespace std;
int mod=100003,tot;
long long m,n;
int power(long long a,long long b)
{
	int re=1;
	for(;b;b>>=1,a=a*a%mod)
	  if(b&1)  re=re*a%mod;
	return re;
}
int main()
{
	scanf("%lld%lld",&m,&n);
	tot=(power(m,n)-(m%mod)*power(m-1,n-1)%mod+(m%mod)*mod)%mod;
	printf("%d",tot);
}

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter