백준 10830 c++

magicdrill·2024년 3월 28일
0

백준 문제풀이

목록 보기
221/654

백준 10830 c++

#include <iostream>

using namespace std;

long long int temp[5][5];
long long int result[5][5];
long long int A[5][5];
long long int N;

long long int input(long long int lower, long long int upper)
{
	//cout << "input()" << endl;
	long long int A;

	while (1)
	{
		cin >> A;
		if (A >= lower && A <= upper)
		{
			break;
		}
		else
		{
			;
		}
	}

	return A;
}

void input_arr(long long int arr[5][5])
{
	int i, j;

	for (i = 0; i < N; i++)
	{
		for (j = 0; j < N; j++)
		{
			arr[i][j] = input(0, 1000);
		}
	}

	return;
}

void pow_matrix(long long int a[5][5], long long int b[5][5])
{
	int i, j, k;

	for (i = 0; i < N; i++)
	{
		for (j = 0; j < N; j++)
		{
			temp[i][j] = 0;
			for (k = 0; k < N; k++)
			{
				temp[i][j] = temp[i][j] + (a[i][k] * b[k][j]);
			}
			temp[i][j] = temp[i][j] % 1000;
		}
	}
	for (i = 0; i < N; i++)
	{
		for (j = 0; j < N; j++)
		{
			a[i][j] = temp[i][j];
		}
	}

	return;
}

void print_result(long long int arr[5][5])
{
	int i, j;

	for (i = 0; i < N; i++)
	{
		for (j = 0; j < N; j++)
		{
			cout << arr[i][j] << " ";
		}
		cout << "\n";
	}
}

void find_result(long long int B)
{
	int i,j;

	for (i = 0; i < N; i++)
	{
		for (j = 0; j < N; j++)
		{
			result[i][j] = 0;
		}
		result[i][i] = 1;
	}
	while (B > 0)
	{
		if (B % 2 == 1)//B가 홀수
		{
			pow_matrix(result, A);
		}
		else
		{
			;
		}
		pow_matrix(A, A);
		B = B / 2;
	}
	//결과 출력
	print_result(result);

	return;
}

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	long long int B;

	N = input(2, 5);
	B = input(1, 100000000000);
	input_arr(A);
	find_result(B);

	return 0;
}

0개의 댓글