Advertisement
Merevoli

Untitled

Jul 14th, 2022
917
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.45 KB | None | 0 0
  1. import sys
  2.  
  3. sys.setrecursionlimit(10000)
  4.  
  5. n = int(input())
  6. ta, tb, tc = [int(_) for _ in input().split()]
  7. pa, pb, pc = [int(_) for _ in input().split()]
  8.  
  9. base_matrix = [
  10.         [pa - 2, 1, 1],
  11.         [1, pb - 2, 1],
  12.         [1, 1, pc - 2],
  13.     ]
  14.  
  15. unit_matrix = [
  16.         [1, 0, 0],
  17.         [0, 1, 0],
  18.         [0, 0, 1],
  19.     ]
  20.  
  21. MOD = 10**9 + 7
  22. i = 0
  23.  
  24. def mul_matrix(matrix_1, matrix_2):
  25.     result_matrix = [[0]*len(matrix_2[0]) for _ in range(len(matrix_1))]
  26.     for a in range(len(matrix_1)):
  27.         for b in range(len(matrix_2[0])):
  28.             s = 0
  29.             for c in range(len(matrix_1[0])):
  30.                 s += matrix_1[a][c] * matrix_2[c][b]
  31.             result_matrix[a][b] = s
  32.     return result_matrix
  33.  
  34. def mod_matrix(matrix, mod):
  35.     for i in range(len(matrix)):
  36.         for j in range(len(matrix[i])):
  37.             matrix[i][j] %= mod
  38.            
  39.     return matrix
  40.  
  41. def pow_matrix(n):
  42.     if n == 0:
  43.         return unit_matrix
  44.     elif n == 1:
  45.         return base_matrix
  46.     else:
  47.         pow_2 = pow_matrix(n // 2)
  48.         if n & 1:
  49.             return mod_matrix(mul_matrix(mul_matrix(pow_2, pow_2), base_matrix), MOD)
  50.         else:
  51.             return mod_matrix(mul_matrix(pow_2, pow_2), MOD)
  52.  
  53.  
  54. t_matrix = [
  55.         [ta],
  56.         [tb],
  57.         [tc],
  58.     ]
  59.  
  60. res_matrix = mul_matrix(pow_matrix(n), t_matrix)
  61. res_matrix = mod_matrix(res_matrix, MOD)
  62. print(res_matrix[0][0], res_matrix[1][0], res_matrix[2][0])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement