1970E2. Trails(Medium)
dp,matrices,2000, https://codeforces.com/problemset/problem/1970/E2
【马铉钦25化院】题目描述与E1完全相同,n的取值改为1≤n≤
对每一组
python
from copy import copy
def muls(ma1,ma2):#实现方阵乘法
res=[[0]*m for i in range(m)]
for i in range(m):
for j in range(m):
c=0
for t in range(m):
c+=ma1[i][t]*ma2[t][j]%1000000007
res[i][j]=c%1000000007
return res
m,n=map(int,input().split())
lis=list(map(int,input().split()))
lil=list(map(int,input().split()))
litr=[[0]*m for i in range(m)]
for j in range(m):
for t in range(m):
litr[j][t]=lis[t]*(lil[j]+lis[j])+lil[t]*lis[j]#获得方阵F
nb=(bin(n-1))[2:]
li=copy(litr)
for i in nb[::-1]:
if i=='1':
li=muls(li,litr)
litr=muls(litr,litr)
print(sum(li[0])%1000000007)