1 条题解

  • 0
    @ 2022-9-10 20:53:10

    题解

    前置知识:Hall定理,高维前缀和

    首先很容易可以建一个二分图,左边n20n \le 20个点是每种人,右边mm个点表示座位。原点到左边的点的权值==有多少人,如果左边某种人可以坐那个作为就连接一个权值为1的边。现在就是问这个二分图匹配能不能把左边流量流满。

    考虑Hall定理,枚举一个左边的集合SS,设f(S)=iSaif(S)=\sum_{i\in S} a_i,那么我们就需要查询[1,m][1,m]中有多少整数至少可以被SS中的一个整除,设为g(S)g(S)。根据Hall定理,如果S[n],f(S)g(S)\forall S\subseteq [n],f(S)\ge g(S),就说明可以匹配,输出Yes

    现在的问题是计算gg根据容斥原理,g(S)=TS(1)T+1h(T)g(S)=\sum_{T\subseteq S} (-1)^{|T|+1} h(T)其中h(T)h(T)表示[1,m][1,m]中是TT所有元素的倍数的数的个数。h(T)=mkTbkh(T)=\lfloor {m\over \prod_{k\in T} b_k}\rfloorgg(1)T+1h(T)(-1)^{|T|+1}h(T)的高维前缀和,使用FWT优化即可。

    总复杂度O(n2n)O(n2^n)不使用FWT是O(n2n+3n)O(n2^n+3^n)

    • 1

    信息

    ID
    162
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    0
    上传者