hdu 1575 Tr A(矩阵快速幂,简单)

题目

和 LightOj 1096 - nth Term  类似的线构造一个符合题意的矩阵乘法模版,然后套快速幂的模版,具体的构造矩阵我就不作图了,看着代码也能理解吧

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;

int num,mod=9973;
struct matrix
{
    int a[12][12];
}origin,answ;

matrix multiply(matrix x,matrix y)//矩阵乘法
{
       matrix temp;
       for(int i=0;i<num;i++)
       {
               for(int j=0;j<num;j++)
               {
                       int ans=0;
                       for(int k=0;k<num;k++)
                       {
                               ans+=((x.a[i][k]*y.a[k][j])%mod);
                       }
                       temp.a[i][j]=ans%mod;
               }
       }
       return temp;
}

matrix calc(int n)//矩阵快速幂——answ*origin^n
{
     while(n)
     {
             if(n%2==1)
                    answ=multiply(origin,answ);
             origin=multiply(origin,origin);
             n/=2;
     }
     return answ;
}

int main()
{
    int k,t,a,b,n;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&k);
        num=n;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                scanf("%d",&origin.a[i][j]);
            }
        }
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                answ.a[i][j]=(i==j);
        answ=calc(k);
        int ans=0;
        for(int i=0;i<n;i++)
            ans+=answ.a[i][i];
        printf("%d
",ans%mod);
    }
    return 0;
}
View Code
一道又一道,好高兴!
原文地址:https://www.cnblogs.com/laiba2004/p/3558529.html