new file: P3390.cpp
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
#include <bits/stdc++.h>
|
||||
const int mod = 1e9 + 7;
|
||||
#define int long long
|
||||
using namespace std;
|
||||
int n;
|
||||
struct node
|
||||
{
|
||||
int a[105][105];
|
||||
void operator*=(const node &b)
|
||||
{
|
||||
int res[105][105] = {};
|
||||
for (int i = 1; i <= n; ++i)
|
||||
{
|
||||
for (int j = 1; j <= n; ++j)
|
||||
{
|
||||
for (int k = 1; k <= n; ++k)
|
||||
{
|
||||
res[i][j] += (a[i][k] * b.a[k][j]) % mod;
|
||||
res[i][j] %= mod;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (int i = 1; i <= n; ++i)
|
||||
{
|
||||
for (int j = 1; j <= n; ++j)
|
||||
{
|
||||
a[i][j] = res[i][j] % mod;
|
||||
}
|
||||
}
|
||||
}
|
||||
} a;
|
||||
long long k;
|
||||
node pow(node a, int k)
|
||||
{
|
||||
node res;
|
||||
for (int i = 1; i <= n; ++i)
|
||||
for (int j = 1; j <= n; ++j)
|
||||
res.a[i][j] = (i == j);
|
||||
while (k)
|
||||
{
|
||||
if (k & 1)
|
||||
res *= a;
|
||||
a *= a;
|
||||
k >>= 1;
|
||||
}
|
||||
while (k)
|
||||
{
|
||||
if (k & 1)
|
||||
res *= a;
|
||||
a *= a;
|
||||
k >>= 1;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
signed main()
|
||||
{
|
||||
scanf("%lld%lld", &n, &k);
|
||||
for (int i = 1; i <= n; ++i)
|
||||
{
|
||||
for (int j = 1; j <= n; ++j)
|
||||
{
|
||||
scanf("%lld", &a.a[i][j]);
|
||||
}
|
||||
}
|
||||
node res = pow(a, k);
|
||||
for (int i = 1; i <= n; ++i)
|
||||
{
|
||||
for (int j = 1; j <= n; ++j)
|
||||
{
|
||||
printf("%lld ", res.a[i][j]);
|
||||
}
|
||||
puts("");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user