记一道 Naive 的计数题

题意

对于一个集合 (S),定义 (F(S,x)=sum_{Tsubset S}G(T) imes x^{|T|}),其中 (G(T)=igoplus_{xin T}x),空集的异或和为 (0)

(Q) 个询问,每次给出区间 ([l,r])(x),令 (S) 是序列的第 (lsim r) 个元素构成的集合,求 (F(S,x))

答案对 (998244353) 取模。

( exttt{Data Range:}nleq 10^5,Qleq 10^5)

分析

可以想到拆位。考虑区间 ([l,r]) 内,第 (k) 位上为 (1) 的数有 (m) 个。则对于第 (k) 位,显然有贡献式:

[left(sum_{jmod2=1}sum_{i=0}^{n-m}inom{m}{j}inom{n-m}{i}x^{i+j} ight) imes2^k ]

提取无关项,可以将柿子化为两个无关的部分从而分别计算。

[left(left(sum_{jmod 2=1}inom{m}{j}x^j ight) imesleft(sum_{i=0}^{n-m}inom{n-m}{i} imes x^i ight) ight) imes2^k ]

右半部分的和式是非常好处理的,难以处理的是左半部分。

这个时候我们想到一个经典恒等式:

[sum_{imod 2=0}inom{n}{i}=sum_{imod 2=1}inom{n}{i} ]

这个恒等式是通过构造 ((1-1)^n) 从而用二项式定理求解得到的。我们也可以用类似的方式构造 ((x-1)^n) ,并且与 ((x+1)^n) 作和或作差得到左半部分的和式。值得注意的是,(n) 的奇偶性会对值造成影响,需要分类讨论。

这里放上结论:

[egin{cases} sumlimits_{imod 2=1}inom{n}{i} imes x^i=frac{(x+1)^n-(x-1)^n}{2}, ext{if } nmod 2=0 \ sumlimits_{imod 2=1}inom{n}{i} imes x^i=frac{(x+1)^n+(x-1)^n}{2}, ext{if }nmod 2=1 end{cases} ]

很轻松的就可以算出最终的答案,时间复杂度为 (O(n log^2 P)),其中 (P) 是模数。

原文地址:https://www.cnblogs.com/tommy0103/p/13917032.html