矩阵快速幂模板

#include <iostream>
#include <string.h>
using namespace std;
typedef long long ll;
const int mod = 9973;
int n;
struct matrix
{
    int f[10][10];
}e;
matrix multi(matrix a, matrix b)
{
    matrix ans;
    memset(ans.f,0,sizeof(ans.f));
    for(int i = 0; i < n; i++)
        for(int j = 0; j < n; j++)
            for(int k = 0; k < n; k++)
                ans.f[i][j] = (ans.f[i][j] + a.f[i][k] * b.f[k][j]) % mod;
    return ans;
}
matrix pow_mod(matrix a, ll k)
{
    matrix ans;
    memset(ans.f,0,sizeof(ans.f));
    for(int i = 0; i < n; i++) ans.f[i][i] = 1;

    while(k)
    {
        if(k&1) ans = multi(ans,a);
        a = multi(a,a);
        k >>= 1;
    }
    return ans;
}
int main()
{
    int t,k;
    cin >> t;
    while(t--)
    {
        cin >> n >> k;
        for(int i = 0; i < n; i++)
            for(int j = 0; j < n; j++)
                cin >> e.f[i][j];

        matrix ans;
        ans = pow_mod(e,k);
        int sum = 0;
        for(int i = 0; i < n; i++)
            sum = (sum + ans.f[i][i]) % mod;
        cout << sum << endl;
    }
}
----------------------------------------------------------hdu1757---------------------------------------------------------------

猜你喜欢

转载自blog.csdn.net/sugarbliss/article/details/80190264