noip(全国青少年信息学奥林匹克联赛)

(快速幂) luogu P3197 [HNOI2008]越狱

2018-10-08  本文已影响0人  不给赞就别想跑哼

若没了解过快速幂,请移至第数论第一篇题解 快速幂模板

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

输入输出格式
输入格式:
输入两个整数 M,N
输出格式:
可能越狱的状态数,模 100003 取余

直接计算可能越狱的情况数很困难,所以我们转换思路,先求出所有的情况,再求出不可能的情况,相减即是可能的情况。。

有n个监狱,m种选择,总方案数便是mn,第一间监狱有m种方案,第二件因为不能和第一间一样则第二间的方案数为m-1,第三件不能和第二间一样,则也有m-1种,以此类推,故不可能的情况数为m(m-1)(n-1);

故答案为mn-m(m-1)(n-1);

该快速幂上场表演了!!

代码如下

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#define LL long long
#include<algorithm>
using namespace std;
LL n,m,mod=100003;
LL quickPow(LL a,LL b){
    LL sum=1;
    while(b){
        if(b&1) sum=sum*a%mod;
        b>>=1;
        a=a*a%mod;
    }
    return sum;
}
int main(){
    scanf("%lld%lld",&m,&n);
    LL ans1=quickPow(m,n),ans2=(m%mod*quickPow(m-1,n-1))%mod;
    LL ans=ans1-ans2;
    if(ans<0) ans+=mod;
    printf("%lld\n",ans%mod);
    return 0;
}

关注点一点,活到九十九!!!谢谢啦!!!

上一篇下一篇

猜你喜欢

热点阅读