結果
| 問題 |
No.599 回文かい
|
| コンテスト | |
| ユーザー |
mattu34
|
| 提出日時 | 2023-04-15 09:28:01 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,303 bytes |
| コンパイル時間 | 619 ms |
| コンパイル使用メモリ | 82,304 KB |
| 実行使用メモリ | 81,536 KB |
| 最終ジャッジ日時 | 2024-10-10 22:07:12 |
| 合計ジャッジ時間 | 2,998 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 18 RE * 4 |
ソースコード
MOD=10**9+7
import random
def isprime(n):
if n == 1:
return False
for i in range(2, int(n**0.5)+1):
if n % i == 0:
return False
return True
def RandomMod(l,r):
ret = random.randrange(l, r)
while not isprime(ret):
ret = random.randrange(l, r)
return ret
s=input()
N=len(s)
memo=[1]*(N+1)
vis=[0]*(N+1)
def dfs(L,R):
if R<L:
return 1
if vis[L]!=0:
return memo[L]
l,r=L,R
while(l<r):
#print(s[L:l+1],s[r:R+1])
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:
memo[L]+=dfs(l+1,r-1)
memo[L]%=MOD
l+=1
r-=1
vis[L]=1
return memo[L]
mod1 = RandomMod(7*10**8, 10**9)
b1 = random.randrange(100, 200)
mod2 = RandomMod(7*10**8, 10**9)
b2 = random.randrange(100, 200)
b1l = [0] * (N+1)
b1l[0] = 1
for i in range(N):
b1l[i+1] = b1l[i] * b1 % mod1
b2l = [0] * (N+1)
b2l[0] = 1
for i in range(N):
b2l[i+1] = b2l[i] * b2 % mod2
s1 = [0] * (N + 1)
s2 = [0] * (N + 1)
t1 = 0
t2 = 0
for i in range(N):
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,N-1))
mattu34