[AHOI2018初中组] 球球的排列
前言
紫题, 启动!
思路
转化题意
对于 \(n\) 个物品, 每个物品拥有特征值 \(a_i\) , 其编号为 \(i\)
一个合法的排列定义为 : \(\forall i \in [1, n) , a_{p_i} \cdot a_{p_i + 1}\) 不是一个完全平方数
求合法排列的数量
这个题听别人讲过, 一如既往地忘掉了
怎么做呢?
看了下 \(\rm{TJ}\) 赤了 \(10\) 分钟的石
考虑根据完全平方数的性质进行一个处理 : 对于 \(a\) 数组中的每一个数字, 将其的所有质因数的偶次消掉, 那么对于现在的 \(a\) 数组, 只有相等的数对才满足原数对乘起来是一个完全平方数
那么你发现数组变成了一个多重集, 我们要计算的是所有多重集排列中, 满足相邻数字不等的方案数
这个问题其实很典啊, 考虑正难则反算不满足条件的方案数, 令 \(f(k)\) 表示「至少」有 \(k\) 对相邻且相等的数对的方案数, 然后常见转化秒了
如何计算 \(f(k)\) ? 我们考虑「钦定」\(k\) 对相邻且相等的数对, 其他的直接乱搞
然后就不会做了, 然后去 讨论区 问, 然后被金钩爷震撼到了
与 某篇题解 一样, 我们考虑先用柿子表示
定义 \(m\) 为颜色总数, \(x_i\) 表示颜色为 \(i\) 的元素数量, \(y_i\) 表示对于颜色 \(i\) , 「钦定」\(y_i\) 个相邻对存在
对于一组确定的 \(y\) , 方案数为:
解释一下,
-
\(\displaystyle \prod_{i = 1}^{m} {x_i - 1 \choose y_i}\) : 你发现把一个相同且相邻的对看做一条无向边, 连一条边相当于把一个点加进一个连通块使得这个图不存在环, 同颜色元素个数为 \(x_i\) , 那么最多可以加 \(x_i - 1\) 条边, 组合数选一下即可, 肯定也是不区分顺序的任意选择
-
\(\displaystyle \frac{(n - \sum_{i = 1}^{m} y_i)!}{\prod_{j = 1}^{m} (x_i - y_i)! }\) : 你发现把一个相同且相邻的对看做一条无向边, 连一条边相当于把一个点加进一个连通块使得总的元素数量 \(-1\), 所以「钦定」\(y_i\) 个相邻且相同的对一定会留下 \(x_i - y_i\) 个 \(i\) 颜色的元素, 做一个多重集排列即可
-
\(\displaystyle \prod_{i = 1}^{m} x_i\) : 比较显然, 对于每种颜色都要区分顺序
然后你就可以根据这个计算出 \(f(k)\) , 从而推出 \(g(k)\) 了
具体的, 你可以搞一个 \(\rm{dp}\) 做一下就可以了, 复杂度 \(\And\) 证明在 这篇题解 中有提到, 是 \(\mathcal{O} (n^2)\) 的
总结
善于利用特殊性质转化问题
本题中利用了完全平方数的性质, 将其转化成常见的多重集, 奇偶次的特性也是完全平方数常见的考点
不好做的问题, 先推柿子
一类相邻对的问题考虑连边之后在图上理解
\(\rm{dp}\) 求 \(f\) 其实很常见的 (哎好像不是第一次说这个了)
特别的是一类按照元素种类作为 \(\rm{dp}\) 状态而非按照位置的 \(\rm{dp}\)
从某种意义上来讲我们可以将其理解成一个特殊的推柿子方式
紫题的含金量还是很高的, 比 [BZOJ4665] 小 w 的喜糖 多了整整 \(1\) 个转化