#796. [CZOJ 一周一测 R8 B] 【模板】数位 dp

[CZOJ 一周一测 R8 B] 【模板】数位 dp

题目背景

注意:这 不 是 数位&*!@#(dp)!#模?>.\版*题!@$=@。

题目描述

对于一个正整数 nn,令 nn 在二进制下从最低位到最高位的数位依次为 n0,n1,…,nkn_0, n_1, \dots, n_k,例如,若 n=11n = 11,则 k=3k = 3,n0=1,n1=1,n2=0,n3=1n_0 = 1, n_1 = 1, n_2 = 0, n_3 = 1。

让 nn 的 权值 f(n)f(n) 表示为 $\sum\limits_{i=0}^k [i \bmod 2 = 1]n_i - \sum\limits_{i=0}^k [i \bmod 2 = 0]n_i$。对于一个正整数 nn,它被称作是 好的 当且仅当 ∣f(n)∣\lvert f(n) \rvert 是 33 的倍数。

给出 L,RL, R,请你求出满足 L≤n≤RL \leq n \leq R 的 好的 nn 的个数。

输入格式

本题单个测试点内有多组数据。

第一行一个整数 TT,表示数据组数。

接下来 TT 行,每行两个整数 L,RL, R 描述一组数据。

输出格式

共 TT 行,每行一个整数表示答案。

样例

1
4 7
1

样例解释

在 [4,7][4, 7] 之间的数中只有 66 满足 ∣f(n)∣=0\lvert f(n) \rvert = 0 是 33 的倍数。

数据规模与约定

本题采用捆绑测试。

  • Subtask 0(13 pts):R≤10R \leq 10。
  • Subtask 1(20 pts):R≤3×103R \leq 3\times 10^3。
  • Subtask 2(20 pts):R≤5×105R \leq 5\times 10^5。
  • Subtask 3(47 pts):无特殊限制。

对于所有数据,1≤L≤R≤10181 \leq L \leq R \leq 10^{18},1≤T≤2×1041 \leq T \leq 2\times 10^4。