結果

問題 No.2917 二重木
コンテスト
ユーザー p-adic
提出日時 2026-07-19 15:10:24
言語 PyPy3
(7.3.17)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
TLE  
実行時間 -
コード長 1,225 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 234 ms
コンパイル使用メモリ 96,228 KB
実行使用メモリ 86,352 KB
最終ジャッジ日時 2026-07-19 15:10:36
合計ジャッジ時間 8,579 ms
ジャッジサーバーID
(参考情報)
judge2_0 / judge3_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 21 TLE * 1 -- * 13
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

def add(f,g):L,M=len(f),len(g);return[((f[i]if i<L else 0)+(g[i]if i<M else 0))%P for i in R(max(L,M))]
def mul(f,g):L,M=len(f),len(g);return[sum(f[i-j]*g[j]for j in R(max(0,i-L+1),min(i+1,M)))%P for i in R(L+M-1)]

def Composition(f,g):
	N=len(f)
	if N==1:return f
	N_minus=N-1
	H=int(N_minus**0.5)
	K=N_minus//H
	g_power=[[]for k in R(max(2,K))]
	g_power[0]=[1]+[0]*(N-1)
	g_power[1]=(g+[0]*(N-len(g)))[:N]
	for k in R(2,K):g_power[k]=mul(g_power[k-1],g_power[1])
	g_power2=[[]for h in R(H+1)]
	g_power2[0]=g_power[0]
	g_power2[1]=mul(g_power[-1],g_power[1])
	for h in R(2,H+1):g_power2[h]=mul(g_power2[h-1],g_power2[1])
	k=h=0
	n_lim=N
	answer=[0]*N
	answer_h=[0]*N
	for d in R(N):
		for n in R(k,n_lim):answer_h[n]=(answer_h[n]+f[d]*g_power[k][n])%P
		k+=1
		if k==K or d==N_minus:
			if h:answer_h=mul(answer_h,g_power2[h])
			answer=add(answer,answer_h)
			k=0
			h+=1
			n_lim-=K
			answer_h=[0]*N
	return answer

R,O=range,print
N,P=map(int,input().split())
L=N+1
if N<4:O([1,3,18][N-1]%P),exit()
F=[1]
G=[1]
I=[1]
for i in R(1,L):
	F+=[F[-1]*i%P]
	I+=[[1,P-P//i*I[P%i]%P][i>1]]
	G+=[G[-1]*I[i]%P]
f=[0]+[0 if d==P else pow(d,d-2,P)*G[d]%P for d in R(1,L)]
g=[f[d]*d%P for d in R(L)]
h=Composition(f,g)
O(h[N]*F[N]%P)
0