【组合数学】[HNOI2008][HYSBZ/BZOJ1008]越狱

来源:互联网 发布:java使用ftp上传文件 编辑:程序博客网 时间:2024/06/05 15:17

题目链接

分析

题目问的是可能越狱的状态数
状态数总的状态数-不可能越狱的状态数=可能越狱的状态数。
每个人可能信仰m种宗教的任何一种,所以一共有mn种状态
不可能越狱的状态:第i(i>1)个人不能和第i-1个人信仰一样的宗教, 所以只有m-1种选择,有m(m1)n1种状态

ans=mnm(m1)n1

用快速幂计算即可。

代码

#include<cstdio>#define MOD 100003int m;long long n;int quick_pow(int a,long long b){    int ret=1;    while(b){        if(b&1)            ret=1ll*ret*a%MOD;        a=1ll*a*a%MOD;        b>>=1;    }    return ret;}template<class T>void Read(T &x){    char c;    while(c=getchar(),c!=EOF)        if(c>='0'&&c<='9'){            x=c-'0';            while(c=getchar(),c>='0'&&c<='9')                x=x*10+c-'0';            ungetc(c,stdin);            return;        }}int main(){    Read(m),Read(n);    printf("%lld",((quick_pow(m%MOD,n)-1ll*m%MOD*quick_pow((m-1)%MOD,n-1))%MOD+MOD)%MOD);}
0 0
原创粉丝点击