【原文链接】
(补发)题解|2023暑期杭电多校06
1001.Count
构造
题目大意
给定
n
,
m
,
k
n,m,k
n,m,k ,构造长度为
n
n
n 的整数序列,元素大小范围为
a
i
∈
[
1
,
m
]
a_i\in [1,m]
ai∈[1,m] ,并且需要保证前
k
k
k 个元素和后
k
k
k 个元素对应相同
求可以构造出的序列数量
解题思路
模拟一下即可
对于
k
≤
n
2
k\le \dfrac{n}{2}
k≤2n ,最后
k
k
k 个元素由前
k
k
k 个元素确定,只需决定前
n
−
k
n-k
n−k 个元素
对于
n
2
≤
k
<
n
\dfrac{n}{2}\le k \lt n
2n≤k<n ,确定了前
n
−
k
n-k
n−k 个元素,可以递归向后确定更多元素
对于
k
=
n
k=n
k=n ,序列本身自然相同,即可以随意确定
n
n
n 个元素
确定
x
x
x 个元素的方案总数为
m
x
m^{x}
mx ,快速幂取模即可
(P.S.):快速幂前先对底数取模//
时间复杂度
快速幂: O ( log n ) O(\log n) O(logn)
参考代码
void solve()
{
ll n,m,k;
cin >> n >> m >> k;
if(n==k) cout << qcpow(m,n) << endl;
else cout << qcpow(m,n-k) << endl;
}