100 atcoder#ABC129E. [ABC129E] Sum Equals Xor

[ABC129E] Sum Equals Xor

题目描述

正整数 L L が二進数表記で与えられます。 以下の条件を満たす非負整数 a, b a,\ b の組 (a, b) (a,\ b) がいくつ存在するか求めてください:

  • a + b  L a\ +\ b\ \leq\ L
  • a + b = a  XOR  b a\ +\ b\ =\ a\ \text{\ XOR\ }\ b

ただし、この値は非常に大きくなることがあるので、109 + 7 10^9\ +\ 7 で割った余りを出力してください。

XOR とは

整数 A, B A,\ B のビットごとの排他的論理和 a  XOR  b a\ \text{\ XOR\ }\ b は、以下のように定義されます。

a  XOR  b a\ \text{\ XOR\ }\ b を二進数表記した際の 2k 2^k (k  0 k\ \geq\ 0 ) の位の数は、A, B A,\ B を二進数表記した際の 2k 2^k の位の数のうち一方のみが 1 1 であれば 1 1 、そうでなければ 0 0 である。 例えば、3  XOR  5 = 6 3\ \text{\ XOR\ }\ 5\ =\ 6 となります (二進数表記すると: 011  XOR  101 = 110 011\ \text{\ XOR\ }\ 101\ =\ 110 )。

输入格式

入力は以下の形式で標準入力から与えられる。

L L

输出格式

条件を満たす組 (a, b) (a,\ b) の個数を 109 + 7 10^9\ +\ 7 で割った余りを出力せよ。

题目大意

以二进制形式给出一个整数 LL ,问有多少个非负整数对 (a,b)(a, b) 满足:a+b=abLa+b = a \oplus b \le L。答案对 109+710^9 + 7 取模。

10
5
1111111111111111111
162261460

提示

制約

  • L L は二進数表記で与えられ、先頭文字は必ず 1 1 である
  • 1  L < 2100,001 1\ \leq\ L\ <\ 2^{100,001}

Sample Explanation 1

条件を満たす (a, b) (a,\ b) としては (0, 0), (0, 1), (1, 0), (0, 2), (2, 0) (0,\ 0),\ (0,\ 1),\ (1,\ 0),\ (0,\ 2),\ (2,\ 0) 5 5 つが考えられます。