#include"10830.h"
using namespace std;
typedef long long ll;
typedef vector<vector<int>> vvi;
namespace
{
int N;
ll B;
vvi mat_origin;
void Output(vvi mat_res)
{
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << mat_res[i][j] << ' ';
}
cout << '\n';
}
}
vvi MatMult(vvi mat1, vvi mat2)
{
vvi mat_res = vvi(N, vector<int>(N));
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
int sum = 0;
for (int k = 0; k < N; k++)
{
sum += mat1[i][k] * mat2[k][j];
}
mat_res[i][j] = sum % 1000;
}
}
return mat_res;
}
vvi MatPower(vvi mat, ll B)
{
if (B == 1) return mat;
vvi mat_temp = MatPower(mat, B / 2);
mat_temp = MatMult(mat_temp, mat_temp);
if (B % 2 == 0) return mat_temp;
else return MatMult(mat_temp, mat);
}
void Input()
{
cin >> N >> B;
mat_origin = vvi(N, vector<int>(N));
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
int temp;
cin >> temp;
mat_origin[i][j] = temp % 1000;
}
}
}
}
void B10830::Solution()
{
Input();
vvi mat_res;
if (B % 2 == 0) mat_res = MatPower(mat_origin, B);
else mat_res = MatPower(mat_origin, B);
Output(mat_res);
}
풀긴 했는데 코드가 너무 긴 것 같기도 하다
namespace
{
int N;
ll B;
vvi mat_origin;
const int MOD = 1000;
void Output(vvi mat_res)
{
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << mat_res[i][j] % MOD << ' ';
}
cout << '\n';
}
}
vvi MatMult(vvi mat1, vvi mat2)
{
vvi mat_res = vvi(N, vector<int>(N,0));
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
for (int k = 0; k < N; k++)
mat_res[i][j] += mat1[i][k] * mat2[k][j] % MOD;
return mat_res;
}
vvi MatPower(vvi mat, ll B)
{
if (B == 1) return mat;
vvi mat_temp = MatPower(mat, B / 2);
mat_temp = MatMult(mat_temp, mat_temp);
if (B % 2 == 1) mat_temp = MatMult(mat_temp, mat);
return mat_temp;
}
void Input()
{
cin >> N >> B;
mat_origin = vvi(N, vector<int>(N));
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cin >> mat_origin[i][j];
}
}
}
}
void B10830::Solution()
{
Input();
Output(MatPower(mat_origin, B));
}
개선해보긴 했는데 크게 차이는 없다.
다른 코드들 봐도 딱히 구조에서 배울만한 점은 없는듯. 의미도 알 수 없게 다 생략해가면서 코딩하는 것보다 정갈하게 코딩하는게 실제 코테에서나 실무에서나 낫다고 생각...
화면 확대 및 축소 구현
스테이지 기반에서 확률 기반 적 스폰으로 변경