有注释,大佬们帮忙看一看
w,s=map(int, input().split())
words = input()
psd417= [ord(words[i]) for i in range(len(words))]
PSD417 = psd417.copy()
'''
'A'~'Z' = 65~90
'a'~'z' = 97~122
'0'~'9' = 48~57
'''
big_w = range(65,91)
small_w = range(97,123)
num = range(48,58)
i = j = 0
while j<len(psd417):
if psd417[j] in num:
PSD417[i] = PSD417[i]-48
if j==0 or (j>0 and psd417[j-1] not in num):
PSD417[i:i] = [28]
i += 1
elif psd417[j] in big_w:
PSD417[i] = PSD417[i]-65
if j>0 :
if psd417[j-1] in num:
PSD417[i:i] = [28]
i += 1
if psd417[j-1] in small_w:
PSD417[i:i] = [28,28]
i += 2
else:
PSD417[i] = PSD417[i]-97
if j==0 or (j>0 and psd417[j-1] not in small_w):
PSD417[i:i] = [27]
i += 1
i += 1
j += 1
if len(PSD417)%2 == 1:
PSD417.append(29)
psd417_final = []
for i in range(0,len(PSD417),2):
psd417_final.append(PSD417[i]*30+PSD417[i+1])
if s==-1:
k=0
else:
k = 2**(s+1)
psd417_final_len =1+len(psd417_final)+k
if psd417_final_len % w != 0:
psd417_final.extend([900]*(w-psd417_final_len % w))
psd417_final[0:0] = [len(psd417_final)+1]
def add_poly(L1, L2):
R = []
if len(L1) > len(L2):
L1, L2 = L2, L1
i = 0
while i < len(L1):
R.append(L1[i] + L2[i])
i += 1
R = R + L2[len(L1):len(L2)]
return R
def subtract_poly(L1, L2):
L2 = L2[:]
for i in range(len(L2)):
L2[i] = -L2[i]
return (add_poly(L1, L2))
def multiply_poly(L1, L2):
if len(L1) > len(L2):
L1, L2 = L2, L1
zero = []
R = []
for i in L1:
T = zero[:]
for j in L2:
T.append(i * j)
R = add_poly(R, T)
zero = zero + [0]
return R
def divide_poly(L1, L2):
if len(L1) < len(L2):
return 0, L1
d = len(L1) - len(L2)
T = L1[:]
R = []
for i in range(d+1):
n = T[len(T) - 1] / L2[len(L2) - 1]
R = [n] + R
T1 = [0] * (d - i) + [n]
T2 = multiply_poly(T1, L2)
T = subtract_poly(T, T2)
T = T[:len(T) - 1]
return R, T
if k>0:
def g(k):
L1 = [1]
for i in range(1,k+1):
G = [-3**i,1]
L1 = multiply_poly(L1, G)
return L1
def d(psd417_final):
L = list(reversed(psd417_final))
return L
d_x = d(psd417_final)
g_x = g(k)
L = [0]*k+d_x
Business,yushu = divide_poly(L, g_x)
q_x_g_x = multiply_poly(Business, g_x)
r_x = subtract_poly(q_x_g_x, L)
c = []
for i in r_x:
if i !=0:
c.append(int(i)%929)
c.reverse()
psd417_final = psd417_final + c
for i in psd417_final:
print(i)