zoukankan      html  css  js  c++  java
  • ARC066B

    ARC066B

    给定 (N(1le Nle 10^{18})),求 (u,vin [0,N]) 中有多少对 ((u,v)) 满足存在 (a,b) 满足 (aoplus b=u,a+b=v)

    ( m Sol:)

    观察到 (v-u=(a& b) imes 2),不妨对 (a&b(x))(aoplus b(u)) 进行计数。

    考虑对 (a,b) 进行计数,假设当前位 (a,b) 均为 (0) 或为 (1),那么对应的 (u,x) 位的数被唯一确定,否则为 ((0,1)) 则可以交换。

    于是假设有 (m)01,那么对答案的贡献为 (frac{1}{m})(于是可以直接数位 dp 统计,复杂度 (mathcal O(log^2 n))

    观察到一组 (a,b) 对答案有贡献当且仅当 (a+ble n),不难注意到交换 ((0,1)) 对的位置对 "和" 无影响,于是强制让 (a) 此位为 (0)(b)(1) 即可。

    然后数位 dp 就是 (mathcal O(log n))

    然而实际上可以直接算,设 (f_i) 表示满足 (a+ble i) 且合法的 ((a,b)) 组数量,然后直接从后往前填数,那么可以得到转移(当前填的数是最后一位)(f_i=f_{frac{i}{2}}+f_{frac{i-1}{2}}+f_{frac{i-2}{2}})

  • 相关阅读:
    CF601B Solution
    CF847F Solution
    CF877D Solution
    CF1472F Solution
    CF1472G Solution
    CF1355E Solution
    CF912D Solution
    CF1167F Solution
    shell脚本自动备份MySQL数据库
    centos7 crontab笔记
  • 原文地址:https://www.cnblogs.com/Soulist/p/13653603.html
Copyright © 2011-2022 走看看