HDU - 1757 A Simple Math Problem 矩阵快速幂

题目链接:https://vjudge.net/problem/HDU-1757

题意:就是求一个函数f(x)的值,如果x<10,f(x)=x,如果f(x)>=10,给你a0~a9一共10个数,f(x)=a0*f(x-1)+a1*f(x-2)+...+f(x-10)*a9。输出结果要对m取模。(k<=2e9,m<=1e5)。

分析:看起来像是个递推,但是看数据范围十分的大,直接抵退肯定超时,构造矩阵,利用矩阵快速幂求解才能提高效率。具体矩阵构造(在网上找的,因为自己懒得画图):

HDU - 1757 A Simple Math Problem 矩阵快速幂_第1张图片














#include  
#include  
#include  
#include  
#include  
using namespace std;  
typedef long long LL;  
const int maxn=10;  
int arr[maxn],f[maxn];  
int k,MOD;  
  
struct Matrix{  
    LL mat[maxn][maxn];  
    Matrix operator*(const Matrix& m) const{//重载乘法运算符  
        Matrix tmp;  
        for(int i=0;i>=1;  
        m=m*m;  
    }  
    LL sum=0;  
    for(int i=0;i


你可能感兴趣的:(矩阵快速幂)