百度笔试-咋过不了

第二题
--------------------
# 矩阵快速幂,咋也过不了
line = input().split(' ')
line = list(map(int, line))
a1, a2, a3, a4 = line[0], line[1], line[2], line[3]
n = line[4]
mod = int(pow(10, 9)+7)
base = [[0, 1, 0, 0],
        [0, 0, 1, 0],
        [0, 0, 0, 1],
        [1, 1, 0, 1]]

init = [[a1],
        [a2],
        [a3],
        [a4]]


def matmul(m1, m2):
  x, y, z = len(m1), len(m1[0]), len(m2[0])
  m3 = [[0 for _ in range(z)] for _ in range(x)]
  for i in range(x):
    for j in range(z):
      for k in range(y):
        m3[i][j] += m1[i][k] * m2[k][j]
        m3[i][j] %= mod
  return m3


if n <= 4:
  print(line[n-1])
else:
  result = [[1, 0, 0, 0],
            [0, 1, 0, 0],
            [0, 0, 1, 0],
            [0, 0, 0, 1]]
  n = n-4
  while n > 0:
    if n & 0x1:
      result = matmul(result, base)
    base = matmul(base, base)
    n >>= 1
  print(matmul(result, init)[3][0]%mod)
#笔试题目##百度#
全部评论
话说第二题能过多少啊
点赞 回复 分享
发布于 2019-09-17 21:21
不能直接合并的,题目有说一个球门进球只能算一分,也就是说有两个球进同一个球门只能算一分
点赞 回复 分享
发布于 2019-09-17 21:19
只过了18,不知道错哪儿。。
点赞 回复 分享
发布于 2019-09-17 21:15

相关推荐

03-25 19:00
东北大学 Java
程序员牛肉:太好了,是聊天记录。不得不信了。 当个乐子看就好,不要散播焦虑
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客企业服务