AcWing 1290. 越狱
. 越狱
一、题目描述
监狱有连续编号为 到 的 个房间,每个房间关押一个犯人。
有 种宗教,每个犯人可能信仰其中一种。
如果相邻房间的犯人信仰的宗教相同,就可能发生越狱。
求有多少种状态可能发生越狱。
输入格式
共一行,包含两个整数 和 。
输出格式
可能越狱的状态数,对 取余。
数据范围
输入样例
2 3
输出样例
6
样例解释
所有可能的 种状态为:。
二、解题思路
本题可以采用容斥原理补集的思想。
考虑 个犯人,种宗教,如何安排不会导致犯罪。
第一个位置可以有 个选择,则与第一个相邻的第二个位置就只有 中选择。
考虑第 个位置,则为了不和他左侧的 位置发生冲突,一共有 种选择。
因此不会导致犯罪的方案是:
则会导致犯罪的方案是:
计算一个数字的次方,还要求取模,自然就需要使用快速幂~
注意
注意减法取模可能会变成负数,那么我们要把他转化正数 即可
这里解释下:为什么取模+减法会出现负数呢?比如
$ (a%MOD -b % MOD) % MOD=13%10 - 5 %10=3-5=-2MOD$就行了
三、实现代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MOD = 100003;
int qmi(int a, int b) {
int res = 1;
while (b) {
if (b & 1) res = res * a % MOD;
a = a * a % MOD;
b >>= 1;
}
return res;
}
signed main() {
int m, n;
cin >> m >> n;
cout << (qmi(m, n) - m * qmi(m - 1, n - 1) % MOD + MOD) % MOD << endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!