zgjja


私信TA

用户名:zgjja

访问量:11994

签 名:

X_X

等  级
排  名 147
经  验 7306
参赛次数 0
文章发表 71
年  龄 0
在职情况 学生
学  校
专  业 X_X

  自我简介:

解题思路:
同斐波那契,利用通项公式推导并写为矩阵乘法形式,然后利用快速幂计算。


注意事项:
矩阵乘法时就要取余,否则超时。

参考代码:

def matrix_mul(A, B):
    return [[sum(a * b % 99999999 for a, b in zip(col, row)) % 99999999 for col in zip(*B)] for row in A]


def matrix_pow(A, n):
    size_ = len(A)
    if n == 0:
        res = [[0 for _ in range(size_)] for _ in range(size_)]
        for i in range(size_):
            res[i][i] = 1
        return res
    elif n == 1:
        return A
    else:
        y = matrix_pow(A, n // 2)
        if n & 1:
            return matrix_mul(matrix_mul(y, y), A)
        return matrix_mul(y, y)


matrix = [[0, 1, 0, 0, 2, 0, 5],
          [1, 0, 0, 0, 3, 2, 3],
          [1, 0, 0, 0, 0, 0, 0],
          [0, 1, 0, 0, 0, 0, 0],
          [0, 0, 1, 0, 0, 0, 0],
          [0, 0, 0, 1, 0, 0, 0],
          [0, 0, 0, 0, 0, 0, 1]]
ini = [[6], [5], [1], [4], [2], [3], [1]]
a = matrix_mul(matrix_pow(matrix, int(input()) - 1), ini)
print(a[-3][0] % 99999999, a[-2][0] % 99999999, sep='\n')


 

0.0分

0 人评分

  评论区

  • «
  • »