监狱有连续编号为1…N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱
直接计算产生相邻的情况相当复杂,但发生相邻的情况数量等于总数量减去不相邻数量。不相邻数量可以按照如下方法构造:
第一个人有 mm 种可能,要不产生相邻则第二个人只有 种选择,第三个人也是,以此类推,总数为:m(m−1)(n−1)m(m−1)(n−1)。而总的排列数量为:nmnm。
#ifdef LOCAL
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#else
#include <bits/stdc++.h>
#endif
#define INF 0x7FFFFFFF
using namespace std;
typedef long long LL;
inline void read(LL&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
namespace QuickPower {
const LL MOD = 100003;
inline LL pow(const LL x, const LL n) {
LL ans = 1;
for (LL num = x % MOD, k = n; k; num = num * num % MOD, k >>= 1) if (k & 1) ans = ans * num % MOD;
return ans;
}
}
int main() {
#ifdef LOCAL
freopen("input.txt", "r", stdin);
#endif
LL M, N;
while (~scanf("%lld%lld", &M, &N)) {
LL ans = QuickPower::pow(M, N) - QuickPower::pow(M-1, N-1)*M;
printf("%lld\n", (ans%QuickPower::MOD+QuickPower::MOD)%QuickPower::MOD);
}
return 0;
}
本文探讨了在一个连续编号的监狱房间中,不同宗教信仰的犯人如何安排才能避免相邻房间信仰相同从而导致越狱风险的问题。通过组合数学的方法,计算了在给定房间数和宗教种类的情况下,可能发生越狱的状态数量。
465

被折叠的 条评论
为什么被折叠?



