반응형
문제
https://www.acmicpc.net/problem/10830
분할정복으로 제곱을 구현했던것과 같다.
(A)^8을 계산하는데 8번(N번) 계산해야한다면
(A^2)^2)^2로 구할시 3번(logN번)만에 계산할수있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | import sys N,B=map(int,sys.stdin.readline().split()) A=[list(map(int,sys.stdin.readline().split())) for _ in range(N)] def matric_mul(A,B): if B==1: for i in range(N): for j in range(N): A[i][j]%=1000 return A elif B%2==1: tmp=[[0 for _ in range(N)] for _ in range(N)] C=matric_mul(A,B-1) for i in range(N): for j in range(N): for k in range(N): tmp[i][j]+=C[i][k]*A[k][j] tmp[i][j]%=1000 return tmp else: tmp=[[0 for _ in range(N)] for _ in range(N)] C=matric_mul(A,B//2) for i in range(N): for j in range(N): for k in range(N): tmp[i][j]+=C[i][k]*C[k][j] tmp[i][j]%=1000 return tmp result=matric_mul(A,B) for li in result: for p in li: print(p,end=' ') print() | cs |
반응형
'알고리즘(python) > 기본' 카테고리의 다른 글
[Python]동적계획법2 백준 2293 (0) | 2020.02.04 |
---|---|
[Python]분할정복 백준 2749 (0) | 2020.01.29 |
[Python]분할정복 백준 2740 (0) | 2020.01.28 |
[Python]분할정복 백준 1629 (0) | 2020.01.26 |
[Python]분할정복 백준 1780 (0) | 2020.01.24 |
최근댓글