本题是数学(组合计数)题:统计多重集的去重全排列中满足「下标 k−1 与下标 k 位置元素不同」的方案数。
第一步:去重全排列总数。 设值 v 出现 cv 次(∑cv=n),由多重集排列公式,互不相同的排列共有
total=∏vcv!n!第二步:补集容斥扣除非法方案。 约束仅在两个下标都存在、即 1≤k≤n−1 时生效(k=0 或 k=n 时下标越界,约束失效,直接返回 total)。非法排列满足 A′[k−1]=A′[k]=v。固定这两个位置的值为 v 后,剩余 n−2 个位置是对去掉两个 v 之后的多重集的排列,方案数为
给定一个包含 n 个整数的数组 A 和一个整数 k,你需要将数组 A 中的所有元素重新排列,生成一个新的序列数组,其中下标第 k−1 个元素和下标第 k 个元素不能数值相同;请输出重新排列后符合条件的数组个数(相同数组排列需去重统计);如果无法构造出满足上述所有条件的数组,输出 0。
符合排列组合条件的数组个数。
输入
4,2,[1,1,2,2]
输出
4
说明
k=2,则 A[1]=A[2] 的组合非法,例如:
输入
1,0,[5]
输出
1
说明
k=0,则约束失效,直接输出原始数组的全排列个数;由于输入数组只有 1 个排列组合,输出 1。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册