zoukankan      html  css  js  c++  java
  • 记一道 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) 是模数。

  • 相关阅读:
    7.1MongoDB之索引
    7.1MongoDB之排序
    6.30MongoDB之Limit与Skip方法
    6.30Java连接MongoDB进行操作练习
    6.30MongoDB之$type操作符
    6.30MongoDB之条件操作符
    6.30MongoDB之"查"
    6.29MongoDB之"改"
    c# 调用jar包
    sql server SQL 调试:无法启动 T-SQL 调试。未能附加到 SQL Server 进程
  • 原文地址:https://www.cnblogs.com/tommy0103/p/13917032.html
Copyright © 2011-2022 走看看