結果
| 問題 |
No.599 回文かい
|
| コンテスト | |
| ユーザー |
vwxyz
|
| 提出日時 | 2022-10-23 23:34:57 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,576 bytes |
| コンパイル時間 | 190 ms |
| コンパイル使用メモリ | 82,524 KB |
| 実行使用メモリ | 77,160 KB |
| 最終ジャッジ日時 | 2024-07-02 12:02:33 |
| 合計ジャッジ時間 | 13,781 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 21 WA * 1 |
ソースコード
import sys
readline=sys.stdin.readline
class Rolling_Hash:
def __init__(self,lst,base,mod):
self.len=len(lst)
self.base=base
self.mod=mod
self.rolling_hash=[None]*(self.len+1)
self.rolling_hash[0]=0
x=1
for i in range(1,self.len+1):
self.rolling_hash[i]=self.rolling_hash[i-1]+x*lst[i-1]
self.rolling_hash[i]%=self.mod
x*=self.base
x%=self.mod
x=pow(x,self.mod-2,self.mod)
self.base_reverse=[None]*(self.len+1)
self.base_reverse[self.len]=x
for i in range(self.len-1,-1,-1):
self.base_reverse[i]=self.base_reverse[i+1]*self.base%self.mod
def __getitem__(self,i):
if type(i)==int:
a,b=i,i+1
else:
a,b=i.start,i.stop
if a==None or a<-self.len:
a=0
elif self.len<=a:
a=self.len
elif a<0:
a+=self.len
if b==None or self.len<=b:
b=self.len
elif b<-self.len:
b=0
elif b<0:
b+=self.len
return (self.rolling_hash[b]-self.rolling_hash[a])*self.base_reverse[a]%self.mod
def __len__(self):
return self.len
S=readline().rstrip()
N=len(S)
base=1<<50
S=Rolling_Hash([ord(s) for s in S],base,(1<<61)-1)
mod=10**9+7
dp=[0]*(N//2+1)
for i in range(N//2,-1,-1):
dp[i]+=1
for j in range(i+1,N//2+1):
if S[i:j]==S[N-j:N-i]:
dp[i]+=dp[j]
dp[i]%=mod
ans=dp[0]
print(ans)
vwxyz