您的位置:首页 > 其它

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

2016-02-03 22:27 399 查看

题目链接

分析

题目问的是可能越狱的状态数

状态数总的状态数-不可能越狱的状态数=可能越狱的状态数。

每个人可能信仰m种宗教的任何一种,所以一共有mnm^n种状态

不可能越狱的状态:第i(i>1)个人不能和第i-1个人信仰一样的宗教, 所以只有m-1种选择,有m∗(m−1)n−1m*(m-1)^{n-1}种状态

ans=mn−m∗(m−1)n−1ans=m^n-m*(m-1)^{n-1}

用快速幂计算即可。

代码

[code]#include<cstdio>
#define MOD 100003
int 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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: