矩阵快速幂(板子)

来源:互联网 发布:硬盘损坏数据恢复 编辑:程序博客网 时间:2024/06/05 00:01

打2017沈阳网赛的时候,居然中途疯狂找矩阵快速幂的板子!!!
自己能力不够,,,怪谁,,,
存个板子.



#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>#include <algorithm>using namespace std;typedef long long LL;const int inf = 1 << 30;const LL INF = 1LL << 60;const int MOD = 1e9 + 7;int n, k;struct Matrix{    int m[55][55];};Matrix operator * (Matrix a, Matrix b){    Matrix c;    memset(c.m, 0, sizeof(c.m));    for(int i = 1; i <= n; i++) {       //row         for(int j = 1; j <= n; j++) {   //col            for(int k = 1; k <= n; k++) {                c.m[i][j] = (c.m[i][j] + a.m[i][k] * b.m[k][j] + MOD) % MOD;            }        }    }    return c;}Matrix operator ^ (Matrix a, int y){    Matrix c;    memset(c.m, 0, sizeof(c.m));    for(int i = 1; i <= n; i++)        c.m[i][i] = 1;    while(y > 0) {        if(y & 1) c = c * a;        a = a * a;        y = y >> 1;    }    return c;}Matrix r, tmp;int main(){    while(scanf("%d %d", &n, &k) != EOF)     {        for(int i = 1; i <= n; i++)            for(int j = 1; j <= n; j++)                scanf("%d", &r.m[i][j]);        tmp = r ^ k;        for(int i = 1; i <= n; i++) {            for(int j = 1; j <= n; j++) {                printf("%d ", tmp.m[i][j]);            }            printf("\n");        }    }    return 0;}
原创粉丝点击