有一些没有见过的推论:
f(n)=i=0∑n(−1)i(in)g(i)⇔g(n)=i=0∑n(−1)i(in)f(i)
f(n)=i=0∑n(in)g(i)⇔g(n)=i=0∑n(−1)n−i(in)f(i)
f(n)=i=n∑m(−1)i(ni)g(i)⇔g(n)=i=n∑m(−1)i(ni)f(i)
f(n)=i=n∑m(ni)g(i)⇔g(n)=i=n∑m(−1)n−i(ni)f(i)
需要注意后面的两种情况的组合数与 m 无关,最常见的还是第四种形式。
对于二维的情况也是类似的,这里只举第 4 个作为例子:
f(n,m)=i=n∑pj=m∑q(ni)(mj)g(i,j)⇔g(n,m)=i=n∑pj=m∑q(−1)n+m−i−j(ni)(mj)f(i,j)
设 f(k) 表示钦定 k 个元素是集合的交集的方案,那么有:
f(k)=(kn)×(22n−k−1)
设 g(k) 表示恰好选了 k 个元素的方案数,可以得到:
f(k)=i=k∑n(ki)×g(i)
反演可以得到:
g(k)=i=k∑n(−1)i−k(ki)f(i)=i=k∑n(−1)i−k(ki)(in)(22n−i−1)
考虑对答案进行容斥,设 fi 为钦定 i 个不合法的情况的方案数,那么显然答案为:
i=0∑n(−1)ifi
设 gi,j 表示考虑前 i 中颜色,其中有 j 个不合法的方案数,那么有:
gi,j=k=0∑min(j,ci)gi−1,j−k×(kci)×(ci−ksi−j)
其中:
ci=j=1∑n[Aj=i],si=si−1+ci
时间复杂度为 O(n2)。
P4859 已经没有什么好害怕的了
考虑令 k←2n+k,这样 a>b 的个数就是 k 了,然后将 a,b 两个数组按照升序排列。
设 fi,j 表示考虑 a 中前 i 个元素,有 j 对 a>b 的方案数,那么有转移方程:
fi,j=fi−1,j+fi−1,j−1×(li−j+1)
其中 li 表示比 ai 小的元素中最大的下标。
设 g(x)=fn,x×(n−x)! 表示钦定 x 个剩下的随便选的方案数,设 f(x) 表示刚好有 x 被选择。
那么有关系:
g(x)=i=x∑n(xi)×f(i)
反演得到:
f(k)=i−k∑n(−1)k−i(ki)×g(i)