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


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

参考代码:

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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论