結果

問題 No.599 回文かい
ユーザー mattu34
提出日時 2023-04-14 12:02:15
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 2,593 ms / 4,000 ms
コード長 1,253 bytes
コンパイル時間 229 ms
コンパイル使用メモリ 82,332 KB
実行使用メモリ 86,208 KB
最終ジャッジ日時 2024-10-10 04:34:31
合計ジャッジ時間 8,577 ms
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 22
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

MOD=10**9+7
import sys
sys.setrecursionlimit(int(1E+7))
import random
import math
def is_prime(n):
sqrt_n = math.ceil(math.sqrt(n))
for i in range(2, sqrt_n):
if n % i == 0:
return False
return True
def RandomMod(l,r):
while(True):
res=random.randrange(l,r)
if is_prime(res):
return res
dp=[1]*(10**4+1)
vis=[0]*(10**4+1)
def dfs(L,R):
if R<L:
return 1
if vis[L]:
return dp[L]
l,r=L,R
while(l<r):
x1=(s1[l+1]-s1[L]*b1l[l+1-L])%mod1
x2=(s2[l+1]-s2[L]*b2l[l+1-L])%mod2
y1=(s1[R+1]-s1[r]*b1l[R+1-r])%mod1
y2=(s2[R+1]-s2[r]*b2l[R+1-r])%mod2
if x1==y1 and x2==y2:
dp[L]+=dfs(l+1,r-1)
dp[L]%=MOD
l+=1
r-=1
vis[L]=1
return dp[L]
S=input()
L=len(S)
mod1=RandomMod(7*10**7,10**9)
mod2=RandomMod(7*10**7,10**9)
b1=random.randrange(100,200)
b2=random.randrange(100,200)
s1=[0]*(L+1)
s2=[0]*(L+1)
b1l=[1]*(L+1)
b2l=[1]*(L+1)
for i in range(L):
b1l[i+1]=b1l[i]*b1%mod1
b2l[i+1]=b2l[i]*b2%mod2
t1=0
t2=0
for i in range(L):
t1=(t1*b1+(ord(S[i])-ord("a")+1))%mod1
t2=(t2*b2+(ord(S[i])-ord("a")+1))%mod2
s1[i+1]=t1
s2[i+1]=t2
print(dfs(0,L-1))
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0