打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;
}