結果
| 問題 |
No.599 回文かい
|
| コンテスト | |
| ユーザー |
koyumeishi
|
| 提出日時 | 2017-11-07 16:59:44 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 849 bytes |
| コンパイル時間 | 71 ms |
| コンパイル使用メモリ | 12,672 KB |
| 実行使用メモリ | 21,888 KB |
| 最終ジャッジ日時 | 2024-11-24 04:49:39 |
| 合計ジャッジ時間 | 46,195 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 13 TLE * 9 |
ソースコード
import array
def zAlgo(s) :
n = len(s)
# z = [0 for i in range(n)]
z = array.array('i', [0 for i in range(n)])
z[0] = n
[l,r] = [0,0]
for i in range(1,n) :
if i > r :
[l,r] = [i,i]
while r<n and s[r] == s[r-l] :
r += 1
z[i] = r-l
else :
k = i-l
if z[k] < r-i+1 :
z[i] = z[k]
else :
l = i
while r<n and s[r] == s[r-l] :
r += 1
z[i] = r-l
r -= 1
return z
mod = 10**9 + 7
s = input()
n = len(s)
# dp = [0 for i in range(n)]
dp = array.array('i', [0 for i in range(n)])
dp[0] = 1
ans = 0
for i in range(n//2) :
m = n-i*2
if m <= 0 :
break
t = s[i:i+m]
z = zAlgo(t)
for j in range(1, m//2+1) :
if z[m-j] == j :
dp[i+j] = (dp[i+j] + dp[i]) % mod
for i in range(n) :
ans = (ans + dp[i]) % mod
print(ans)
koyumeishi