随笔 3

[HNOI2008] 越狱

题意简述

\(n\) 个数,每个数取值为 \([1,m]\),问 \(n\) 个数出现相邻两个数相等的方案的数量,答案模 \(100003\)


本题有一些还算实用的trick。

首先考虑到直接求答案不好做,由此思考反着做,答案即所有方案数减去 \(n\) 个数不出现相邻两个数相等的情况的方案数量。

所有方案数,每个位置都可以取 \(m\) 个数,即 \(m^n\)

\(n\) 个数不出现相邻两个数相等的情况的方案数量,第一个位置可以取 \(m\) 个数,其余位置取 \(m-1\) 个数,即 \(m(m-1)^{n-1}\)

答案即 \(m^n-m(m-1)^{n-1}\),加上模就是 \((m^n\bmod 100003-m(m-1)^{n-1} \bmod 100003)\bmod 100003\)

由于 \(n\le 10^{12}\),使用快速幂。

另外还有一个细节,\((m^n\bmod 100003-m(m-1)^{n-1} \bmod 100003)\bmod 100003\) 的值有可能是负数,根据模运算意义,应该加上 \(100003\) 再模 \(100003\)

最后答案应该是 \((m^n\bmod 100003-m(m-1)^{n-1} \bmod 100003+100003)\bmod 100003\)

posted @ 2025-08-13 19:30  AnOIer  阅读(4)  评论(0)    收藏  举报
//雪花飘落效果