洛谷题单指南-组合数学与计数-P3197 [HNOI2008] 越狱
原题链接:https://www.luogu.com.cn/problem/P3197
题意解读:n个空位放置m个不同的数,相邻位置数字相同的放法有多少种。
解题思路:
先考虑所有方法,对于每一个空位有m中方法,一共mn种(乘法原理);
相邻位置数字相同的方法不好求,转而考虑相邻位置数字不同的方法,对于第1个位置有m种选择,第2、3...n个位置都有m-1种选择,一共是m(m-1)n-1种;
根据补集的特性,最终结果是mn-m(m-1)n-1,快速幂求解即可。
100分代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MOD = 100003;
LL m, n, ans;
LL ksm(LL a, LL b)
{
LL res = 1;
while(b)
{
if(b & 1) res = res * a % MOD;
a = a * a % MOD;
b >>= 1;
}
return res;
}
int main()
{
cin >> m >> n;
ans = ksm(m, n) - m * ksm(m - 1, n - 1) % MOD;
ans = (ans + MOD) % MOD;
cout << ans << endl;
return 0;
}
浙公网安备 33010602011771号