下のコードで回答されている方がいて、
python
1mod=10**9+7 2k=int(input()) 3s=input() 4l=len(s) 5fact=[1] #0!~(|S|+k)!の前計算を行う 6for i in range(1,k+l+1): 7 fact.append((fact[-1]*i)%mod) 8revfact=[] 9for i in range(k+l+1): #0!~(|S|+k)!の逆数の前計算を行う 10 revfact.append(pow(fact[i],mod-2,mod)) 11pow1=[1] 12pow2=[1] 13for i in range(1,k+l+1): #25^Kと26^Kの前計算を行う 14 pow1.append((pow1[-1]*25)%mod) 15 pow2.append((pow2[-1]*26)%mod) 16ans=0 17for i in range(k+l): #Sの最後の文字を置く場所を|S|+Kマスの中からすべて試す 18 coef1=(pow1[k-i]*pow2[i])%mod 19 if i<=k: 20 coef2=(fact[k+l-1-i]*revfact[l-1]*revfact[k-i])%mod 21 else: 22 coef2=0 23 ans+=coef1*coef2 24 ans%=mod 25print(ans)
その中の
python
1coef1=(pow1[k-i]*pow2[i])%mod 2 if i<=k: 3 coef2=(fact[k+l-1-i]*revfact[l-1]*revfact[k-i])%mod 4 else: 5 coef2=0
ここの処理が理解できず困っています。
ご教示よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー