1 条题解

  • 0
    @ 2025-8-24 23:17:49

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar LiWenX
    4587

    搬运于2025-08-24 23:17:49,当前版本为作者最后更新于2025-06-10 12:05:43,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    他这个题意里面的循环就是置换环,你要存在一个长度为 AA 和一个长度为 BB 的置换环使得 AA 中元素小于 BB 中元素。

    比较元素的大小比较难以理解,所以可以值域和下标交换,答案显然不变,问题变成你要存在一个长度为 AA 和一个长度为 BB 的置换环使得 AA 中所有元素在 BB 中所有元素之前出现。

    所以可以认为是我们要把至少一个长度为 AA 的置换环放到至少一个长度为 BB 的置换环前面,这样的限制像直接告诉你了要容斥。

    所以钦定 ii 个长度为 AAjj 个长度为 BB 的置换环出来,且认为 ii 个环在 jj 个环前面,前 ii 个环和后 jj 个环内部两两不区分顺序,容斥系数就是 (1)i+j(-1)^{i+j},设 ii 个长度为 AA 的环的方案数是 fif_ijj 个长度为 BB 的环的方案数是 gjg_j,剩下的数随便放都行,那么此时对答案的贡献就是 $(-1)^{i+j}f_ig_j\binom{n}{Ai+Bj}(n-Ai-Bj)!=(-1)^{i+j}f_ig_j\dfrac{n!}{(Ai+Bj)!}$。

    所以如果可以计算 fif_i,就可以使用卷积快速计算出答案。

    计算 ff 也是简单的,长度为 AA 的置换环数量是 (A1)!(A-1)!,考虑带上标号,最后外面乘上 (Ai)!(Ai)!,贡献就是 1A\dfrac{1}{A},注意环之间不区分顺序,所以 fi=(Ai)!i!Aif_i=\dfrac{(Ai)!}{i!A^i}gig_i 同理。

    求出来卷一下就做完了,时间复杂度 O(nlogn)O(n\log n),代码太过于简单就不放了。

    upd:

    有同学说这个容斥有点抽象,不能理解为啥是对的,那么简单证一下。

    容斥系数看作是 (1)i1(1)j1(-1)^{i-1}(-1)^{j-1},其实形式非常像子集反演:TS,T>0(1)T+1=1\sum\limits_{T\subseteq S,|T|>0} (-1)^{|T|+1}=1

    而我们要说明这个容斥是对的,那就是说对于所有的合法排列,他最后容斥系数和为 11,不合法排列容斥系数为 00

    首先不合法排列没有考虑过,所以系数当然是 00

    对于合法,相信你看到上面的式子你就会了,我们其实干的就是一模一样的事情,只不过是枚举了两个集合,然后计算了类似 $\sum\limits_{T_1\subseteq S_1,|T_1|>0} (-1)^{|T_2|+1}\sum\limits_{T_2\subseteq S_2,|T_2|>0} (-1)^{|T_2|+1}=1$ 的东西,唯一的限制是说 T1T_1 里面的环都在 T2T_2 前面。我们考虑减去不合法的贡献,如果我们考虑这个式子里面的空集,那么一个元素是不合法的集合和去掉这个元素的集合形成双射,不合法的贡献必然是 00,所以加上限制的式子容斥系数和依然是 11

    所以这个容斥是对的。

    • 1

    信息

    ID
    7419
    时间
    1000ms
    内存
    512MiB
    难度
    6
    标签
    递交数
    0
    已通过
    0
    上传者