Skip to content
0

题解:[AHOI2018初中组] 球球的排列

有一个结论,如果 a×ba×c 都是完全平方数,那么 b×c 也是完全平方数。从质因数的角度看是比较容易理解的(bc 的质因子的指数对 2 同余)。

考虑容斥,用至少 0 对不合法的减去至少 1 对不合法的加上至少 2 对不合法的……。

然后把 n 个数按照是否形成完全平方数分成 m 类,第 i 类的 ci 个数必然是被拆成若干段塞进了最终的序列里,加入被拆成了 i 段,那么显然就是产生了 (mi) 对不合法的数(注意是对数不是个数)。设 gi,j 表示大小为 i 的块产生了 j 对不合法的数,即分成了 (ij) 段。那么选 (ij) 个数作为段头,剩下的随便放,则有

gi,j=CiijAij

然后设 fi,j 表示安排了前 i 类数,产生了 j 对不合法的方案数,则直接 dp 转移即可。

fi,j=fi1,jk×gci,k

fm,i 则为一开始要求的 i 对不合法的,此时还没考虑块与块之间的重排,最后记得乘上 (ni)!

最近更新