P8377 [PFOI Round1] 暴龙的火锅
首先我们看到题目中有斐波那契数列,还有mod9明眼人都能看出来暴力会爆,那么又有什么方法呢?
我们先要知道一个定理:一个数的各位相加mod9就等于这个数mod9,所以显然易见答案就是斐波那契数列的1-n项加起来mod9,但斐波那契数列到后面显然也会爆,所以我们就将mod9融入斐波那契数列的计算中,毕竟mod9有万金油特性,改变顺序不会影响结果。
但这时我们又会发现时间会爆掉,所以就要引入前缀和做法,将数组预处理,直接输出结果。
代码如下:
t=int(input())
a=[0]*1000005
s=[0]*1000005
a[1]=a[2]=1
for i in range(3,1000003):
a[i]=(a[i-1]+a[i-2])%9
for i in range(1,1000003):
s[i]=s[i-1]+a[i]
while t:
x=int(input())
print(s[x]%9)
t-=1