[HNOI2008] 越狱 快速幂

本文分析了HNOI2008越狱问题的解决方法,通过快速幂运算计算宗教相同的犯人不相邻的放置方案数量。在给定的(m)种宗教和(n)个房间的情况下,提供了计算总方案数的算法实现,并考虑了模运算后的特殊情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[HNOI2008] 越狱 快速幂

水。考虑不发生越狱的情况:即宗教相同的都不相邻,一号任意放\(m\)种宗教的人,此后\(n-1\)个房间都放与上一个宗教不同的人,有\(m-1\)种,所以共有\(m*(m-1)^{n-1}\)种。答案即\(m^n-m*(m-1)^{n-1}\)。快速幂即可。

注意,这里需要考虑模后相减为负的情况,此时将负值再加上模数变为正数即可。

#include <cstdio>
#define MOD 100003
#define ll long long
using namespace std;
ll m,n;
ll qpow(ll x, ll k){
    ll ans=1;
    while(k){
        if(k&1) ans=ans*x%MOD;
        k>>=1;
        x=x*x%MOD;
    }
    return ans;
}
int main(){
    scanf("%lld %lld", &m, &n);
    m%=MOD;
    printf("%lld\n", (qpow(m, n)-qpow(m-1, n-1)*m%MOD+MOD)%MOD);
    return 0;
}

转载于:https://www.cnblogs.com/santiego/p/11144100.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值