[HNOI2008 Prison]

[关键字]:数学

[题目大意]:监狱里有n个犯人信奉m种宗教,问有两个信奉相同宗教的犯人埃在一起的方案数。

//=============================================================================

[分析]:如果想到反向思维你就成功了!所有方案数=mn没有两个宗教相同的犯人挨在一起的方案数是m*(m-1)*(m-1)……*(m-1)=(m-1)n-1,所以答案就是mn-(m-1)n-1

[代码]:

View Code
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;

const int MOD=100003;

long long n,m,x,ans,ans2;

long long Work(long long n)
{
if (n==1) return x%MOD;
if (n==0) return 1%MOD;
long long temp=Work(n/2);
//printf("%I64d\n",temp);
temp=(temp*temp)%MOD;
if (n%2==1) temp=(temp*x)%MOD;
return temp;
}

int main()
{
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
scanf("%I64d%I64d",&m,&n);
x=m;
ans=Work(n);
x=m-1;
ans2=Work(n-1);
ans2=(ans2*m)%MOD;
printf("%I64d\n",(ans+MOD-ans2)%MOD);
//system("pause");
return 0;
}



你可能感兴趣的:(2008)