結果
問題 |
No.2234 palindromer
|
ユーザー |
![]() |
提出日時 | 2025-05-07 04:00:21 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 41 ms / 2,000 ms |
コード長 | 1,255 bytes |
コンパイル時間 | 580 ms |
コンパイル使用メモリ | 82,796 KB |
実行使用メモリ | 56,144 KB |
最終ジャッジ日時 | 2025-05-07 04:00:24 |
合計ジャッジ時間 | 2,338 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 13 |
ソースコード
from collections import deque class RollingHash: def __init__(self): self.MOD = 998244353 self.B = 1009 self.h = 0 self.deq = deque() pass def append(self, c: str): assert len(c) == 1 self.deq.append(ord(c)) self.h = self.h * self.B + ord(c) self.h %= self.MOD def appendleft(self, c: str): assert len(c) == 1 sz = len(self.deq) self.deq.appendleft(ord(c)) self.h += ord(c) * pow(self.B, sz, self.MOD) self.h %= self.MOD def pop(self): assert len(self.deq) > 0 inv_b = pow(self.B, self.MOD-2, self.MOD) v = self.deq.pop() self.h = (self.h - v) * inv_b % self.MOD def popleft(self): assert len(self.deq) > 0 sz = len(self.deq) v = self.deq.popleft() self.h -= v * pow(self.B, sz-1, self.MOD) self.h %= self.MOD def hash(self) -> int: return self.h S = input() h = RollingHash() r_h = RollingHash() for c in S: h.append(c) for c in reversed(S): r_h.append(c) for i in range(len(S)): if h.hash() == r_h.hash(): t = S[:i] ans = S + t[::-1] print(ans) break h.popleft() r_h.pop()