洛谷题单指南-组合数学与计数-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;
}

 

posted @ 2025-11-12 15:04  hackerchef  阅读(12)  评论(0)    收藏  举报