题目名称 4489. 魔力数字
输入输出 math.in/out
难度等级 ★★☆
时间限制 1000 ms (1 s)
内存限制 512 MiB
测试数据 10
题目来源 Gravatar123 于2026-09-07加入
开放分组 全部用户
提交状态
分类标签
分享题解
通过:1, 提交:2, 通过率:50%
Gravatar123 100 2.623 s 48.09 MiB C++
Gravatar123 0 2.744 s 48.13 MiB C++
关于 魔力数字 的近10条评论(全部评论)

4489. 魔力数字

★★☆   输入文件:math.in   输出文件:math.out   简单对比
时间限制:1 s   内存限制:512 MiB

【题目背景】

一天数学课上,豆包有了神奇的发现。

【题目描述】

豆包在研究一种神奇的数字能量。对于任意正整数 $x$,定义它的闪耀度 $g(x)$ 为 $x$ 在二进制表示下数码 $1$ 的个数。例如 $g(5)=g(101_{(2)})=2$。

此外,豆包定义了一个闪耀能量数列 $f$,该数列依赖于一个正整数参数 $a$,并满足如下递推关系:

$f_0=0,f_1=1,f_i=a \cdot f_{i-1}+f_{i-2} (if  i \ge 2)$

现在豆包得到了一个巨大的数字 $n$,以二进制形式给出(保证没有前导零)。他想知道,从 $1$ 到 $n$ 的所有整数中,每个数的闪耀度对应的闪耀能量之和是多少。即求

$\sum_{i=1}^{n} f(g(i)) \pmod{10^9+7}$

请你帮豆包计算这个值。

大样例

【输入格式】

第一行一个仅由 0 和 1 组成的字符串 $s$,表示数字 $n$ 的二进制形式,保证首位为 1。

第二行一个正整数 $a$,即闪耀能量数列的参数。

【输出格式】

输出一行一个整数,表示求和结果对 $10^9+7$ 取模后的值。

【样例输入】

101
2

【样例输出】

7

【样例说明】

$s=101$ 对应 $n=5$,参数 $a=2$。

闪耀能量数列的前几项:

$f(0)=0,f(1)=1,f(2)=2\times1+0=2$

计算 $i$ 从 $1$ 到 $5$ 的 $f(g(i))$:

$i=1 (1_{2}) : g(1)=1,f(1)=1$ 

$i=2 (10_{2}) : g(2)=1,f(1)=1$

$i=3 (11_{2}) : g(3)=2,f(2)=2$

$i=4 (100_{2}) : g(4)=1,f(1)=1$ 

$i=5 (101_{2}) : g(5)=2,f(2)=2$

$总和为 1+1+2+1+2=7。$

【数据规模与约定】

对于所有数据点:

$1: | s | \le 20 $

$2: n$ 的数位全为 $1$

$3: |s| \le 1000,a=1$   

$4: |s| \le 1000$

$5: |s| \le 10^6,a=1$

$6: |s| \le 10^6$

$7: a=1$

$8,9.10:$ 无任何限制

对于 $100%$ 的数据,$1 \le |s| \le 10^7$,$1 \le a \le 10^9。$

【来源】

好题