在本题中,跨度用 m 表示,询问次数用 t 表示。为与代码变量名一致,以下用 k 表示跨度(即 m),用 q 表示询问次数(即 t),用 Sn 表示数列第 n 项(即 an)。
这道题定义了一个 k 阶斐波那契型数列:
给定一个正整数 m,定义一个数列 {an}:前 m 项均为 1,即 a1=a2=⋯=am=1;对于 n>m,第 n 项等于它前面 m 项的和,即 an=an−1+an−2+⋯+an−m。现在有 t 次询问,每次询问给出一个正整数 x,你需要输出 ax 对 109+7 取模的结果。
数据范围:1≤m≤106,1≤t≤2imes105,1≤x≤106。
第一行包含两个整数 m 和 t,分别表示数列跨度和询问次数。 接下来 t 行,每行包含一个整数 x,表示查询的项数。
输出 t 行,每行一个整数,表示对应询问的答案模 109+7。
输入
1 3
1
2
3
输出
1
1
1
说明
当 m=1 时,数列满足 a1=1,且对于 n>1 有 an=an−1。因此所有项均为 1。查询 1、2、3 时输出 1。
输入
3 3
1
4
6
输出
1
3
9
说明
当 m=3 时,前 3 项均为 1:a1=a2=a3=1。
计算后续项:
a4=a1+a2+a3=1+1+1=3;
a5=a2+a3+a4=1+1+3=5;
a6=a3+a4+a5=1+3+5=9。
因此查询 x=1 输出 1,x=4 输出 3,x=6 输出 9。
输入
4 2
5
7
输出
4
13
说明
当 m=4 时,前 4 项均为 1:a1=a2=a3=a4=1。
计算后续项:
a5=a1+a2+a3+a4=4;
a6=a2+a3+a4+a5=1+1+1+4=7;
a7=a3+a4+a5+a6=1+1+4+7=13。
因此 x=5 输出 4,x=7 输出 13。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册