题目出的非常好,他好就好在他哪里都好,如果能换道题出的话,那想必一定会更好。
注意到题目中比较复杂的限制是
f(P)=f(Q),考虑对这一条限制直接拆位做,记
f 表示一个
n 位的原问题,由于
f(P)=f(Q),则有
f=g11+g00。其中
gij 表示一个
n−1 位的问题,其中
f(P) 在第
n 位要求为
i,
f(Q) 在第
n 位要求为
j。但你注意到要求为
0 这一限制并不好达到。考虑容斥为要求为
1 和无限制。也即
g11=h++,g00=h−−−h+−−h−++h++,也即
f=h−−−h−+−h+−+2h++。
换而言之,
f=P,Q∑w(P,Q)×t(P,Q),其中
w(P,Q) 表示容斥系数,每一位形如
[1−1−12]。而
t(P,Q) 表示贡献式子,对于每一个
S,其可以在
P 里当且仅当其为
P 的超集,
Q 同理。故有
t(P,Q)=fP×fQ×gP∪Q,(由于下文中不再使用原来的
f 和
g,我们重标号一下)其中
fS 表示
S 超集的
∏(ai+1),
gS 表示
∏(ai+1)22ai+1。
我们在
P∪Q 处统计答案,对
w(P,Q) 构造 FWT 矩阵
[110−2] 和 IFWT 矩阵
[1−21021]。在特殊性质 B 下可以做到
O(2n×n)。
无特殊性质时需记录
0 的次数,然而该多项式会有
O(2n) 次,复杂度退化到
O(4n×n)。根据某些经典模型,过程中多项式次数不降,而我们只需求最低次项系数,因此只需记录最低次项系数即可。时间复杂度
O(2n×n)。