题目地址:
思想: 1模仿快速模幂法 ; 给矩阵写一个快幂
2 但是k太大 直接求和还是会tle 这个很像等比数列求和 但是可以递归用二分求,理论基础如下 :
求和二分:A+A^2+A...+A^(2k+1)= A+A^2+...+A^k+A^(k+1)+A^(k+1)*(A+A^2+...+A^k).
3 矩阵用结构体存储很好用呀
之前 用int **存好像容易超内存 或者时间效率不高
4递归函数设计时,把调用递归的放在前面,这样实现自动回溯,而且不会爆栈
5 用g++提交会runtime error c++ ac ,坑爹 搞了一晚上
#include#include #define maxn 101using namespace std;int n;int M;typedefstruct{ int m[maxn][maxn];}matrix;matrix per;matrix a;void init(){ for(int i=0;i >a.m[i][j]; a.m[i][j]%=M; per.m[i][j]=(i==j); }}matrix multi(matrix a,matrix b){ matrix ans; for(int i=0;i >=1; aa=multi(aa,aa); } return ans;}matrix add(matrix a,matrix b){ matrix ans; for(int i=0;i >n>>k>>M; init(); matrix ans; ans=sum(k); for(int i=0;i