arundeepak

matrixExponentiationExample1

Mar 31st, 2016
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.45 KB | None | 0 0
  1. #https://www.hackerearth.com/problem/algorithm/pk-and-interesting-language/
  2.  
  3. '__author__'=='deepak Singh Mehta(learning Matrix expo. :) ) '
  4.  
  5. g,a,r,C = list(),list(),list(),list()
  6. mod = 1000000007
  7. def init():
  8.     global a,r,C
  9.     a = [[0 for i in range(26)] for i in range(26)]
  10.     r = [[0 for i in range(26)] for i in range(26)]
  11.     C = [[0 for i in range(26)] for i in range(26)]
  12.  
  13.  
  14. def matMultiply(A,B):
  15.     global mod
  16.     for i in range(26):
  17.         for j in range(26):
  18.             C[i][j]=0
  19.             for k in range(26):
  20.                 C[i][j] +=(A[i][k]*B[k][j])%mod;
  21.  
  22.     for i in range(26):
  23.         for j in range(26):
  24.             A[i][j] = C[i][j]
  25.  
  26. def matPower(k):
  27.     while k:
  28.         if k&1:
  29.             matMultiply(r,a)
  30.         matMultiply(a,a)
  31.         k >>= 1
  32.            
  33.  
  34. if __name__=='__main__':
  35.     letters = 'abcdefghijklmnopqrstuvwxyz'
  36.     init()
  37.     for _ in range(26):
  38.         #for j in range(26):
  39.         temp = list(map(int,input().split()))
  40.         g.append(temp)
  41.     t = int(input())
  42.     assert(1 <= t and t <= 100)
  43.     for _ in range(t):
  44.         ch,l = map(str,input().split())
  45.         l = int(l)
  46.         assert(1<= l and l<=10000000)
  47.         ans = 0
  48.         u = letters.index(ch)
  49.         for i in range(26):
  50.             for j in range(26):
  51.                 r[i][j]=a[i][j]=g[i][j]
  52.         l -= 2
  53.         matPower(l)
  54.         for i in range(26):
  55.             ans = (ans + r[i][u])%mod
  56.         print(ans)
Add Comment
Please, Sign In to add comment