[C++]BOJ 10830号:行列二乗
📝 質問する
💻 実行コード
// BOJ 10830번 : 행렬 제곱
#include <iostream>
using namespace std;
void matrix(int a[5][5], int b[5][5]);
long long n, b;
int arr[5][5];
int result[5][5];
int tmp[5][5];
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n >> b;
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
cin >> arr[i][j];
}
result[i][i] = 1; // result 배열 초기화
}
while(b){ // b가 0이 아닐 떄까지
if(b % 2 == 1){ // 홀수일 때
matrix(result, arr);
}
matrix(arr, arr); // 짝수일 때
b /= 2; // 2로 나누기
}
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
cout << result[i][j] << " "; // 배열 출력
}
cout << "\n";
}
}
void matrix(int a[5][5], int b[5][5]){
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
tmp[i][j] = 0; // tmp 초기화
for(int k = 0; k < n; k++){ // a와 b 곱한 값 tmp에 넣기
tmp[i][j] += a[i][k] * b[k][j];
}
tmp[i][j] %= 1000; // 값을 1000으로 나눈 나머지 저장
}
}
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
a[i][j] = tmp[i][j]; // tmp의 값을 a배열(result)에 다시 저장
}
}
}
📚 問題を解く
A^nはAxAx...a^nこのまま乗るとタイムアウト
高速反復二乗アルゴリズム
実行結果
Reference
この問題について([C++]BOJ 10830号:行列二乗), 我々は、より多くの情報をここで見つけました https://velog.io/@kwonjeong/C-BOJ-10830번-행렬-제곱テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol