結果
| 問題 |
No.599 回文かい
|
| コンテスト | |
| ユーザー |
rlangevin
|
| 提出日時 | 2023-10-18 08:59:12 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 984 bytes |
| コンパイル時間 | 459 ms |
| コンパイル使用メモリ | 82,184 KB |
| 実行使用メモリ | 99,564 KB |
| 最終ジャッジ日時 | 2024-09-18 05:26:38 |
| 合計ジャッジ時間 | 7,663 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 4 WA * 10 TLE * 1 -- * 7 |
ソースコード
import sys
sys.setrecursionlimit(10**7)
from functools import lru_cache
@lru_cache(maxsize=None)
def f(start, goal):
val = 1
ind = 1
while start + ind < goal - ind:
if R.get(start, start + ind) == R.get(goal - ind, goal):
val += f(start + ind, goal - ind)
ind += 1
return val
class RollingHash():
def __init__(self, s):
self._mod = 2 ** 64 - 1
self._base = 4649
n = len(s)
self.h = [0] * (n + 1)
self.pw = [1] * (n + 1)
for i in range(n):
self.h[i + 1] = self.h[i] * self._base + ord(s[i])
self.h[i + 1] %= self._mod
for i in range(n):
self.pw[i + 1] = self.pw[i] * self._base
self.pw[i + 1] %= self._mod
"""
s[l:r]のhash値
"""
def get(self, l, r):
return (self.h[r] - self.h[l] * self.pw[r - l]) % self._mod
S = input()
R = RollingHash(S)
print(f(0, len(S)))
rlangevin