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

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

题目描述
监狱有连续编号为 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;
}

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,421评论 0 2
  • A我今天学了什么 1.下拉菜单 2.边框圆角 3.元素阴影 4.文本阴影 text-overflow 文本溢出属性...
    相信自己_胡阅读 236评论 0 0
  • 画歪了的路飞
    独小爱阅读 155评论 0 0
  • 《关于“情商”,你所不知道的》 1. "当我们讨厌一个人的时候, 经常会想到这个词。” 近几年,人们特别重视一种能...
    黑山007阅读 392评论 0 3
  • 今日体验 今天安装行车记录仪 没一个人安过 不懂就请教别人 顺利装上了 不懂就多问 自己才能快速成长
    王松奇阅读 170评论 0 0