https://www.acmicpc.net/problem/10830

Baekjoon Online JudgeBaekjoon Online Judgewww.acmicpc.net

#include <bits/stdc++.h>


using namespace std;


vector<vector<int>> calc(vector<vector<int>> aa, vector<vector<int>> bb)

{

int n = aa.size();

vector<vector<int>> res(n);

for (int i = 0; i < n; i++)

{

res[i].resize(n, 0);

}

for (int i = 0; i < n; i++)

{

for (int j = 0; j < n; j++)

{

for (int k = 0; k < n; k++)

{

res[i][j] += (aa[i][k] * bb[k][j]) % 1000;

}

res[i][j] %= 1000;

}

}

return res;

}


vector<vector<int>> func(vector<vector<int>> a, long long b)

{

if (b == 1)

{

return a;

}

vector<vector<int>> c = calc(func(a, b / 2), func(a, b / 2));

if (b % 2 == 1)

{

return calc(c, a);

}

else

{

return c;

}

}


int main() {

ios::sync_with_stdio(0);

cin.tie(0);


long long n, b;

cin >> n >> b;


vector<vector<int>> a(n);

for (int i = 0; i < n; i++)

{

a[i].resize(n, 0);

}


for (int i = 0; i < n; i++)

{

for (int j = 0; j < n; j++)

{

cin >> a[i][j];

}

}


vector<vector<int>> answer = func(a, b);


for (int i = 0; i < n; i++)

{

for (int j = 0; j < n; j++)

{

cout << answer[i][j] % 1000 << ' ';

}

cout << '\n';

}


return 0;

}


a^b에서 b가 큰 수일 때 연산 하는거 그대로 따라서

재귀로 풀었는데 시간초과나버림. 접근 방법이 잘못됐나요