結果
| 問題 |
No.465 PPPPPPPPPPPPPPPPAPPPPPPPP
|
| コンテスト | |
| ユーザー |
りあん
|
| 提出日時 | 2020-11-23 06:33:09 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,484 ms / 2,000 ms |
| コード長 | 1,549 bytes |
| コンパイル時間 | 398 ms |
| コンパイル使用メモリ | 82,384 KB |
| 実行使用メモリ | 214,636 KB |
| 最終ジャッジ日時 | 2024-07-23 17:19:14 |
| 合計ジャッジ時間 | 12,373 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 20 |
ソースコード
import itertools
def pal(s_):
s = "^" + s_
n = len(s)
pl = [[0, 0, 0] for _ in range(n)]
pl[0][0] = 1
gpl = [[0, 0, 0] for _ in range(n)]
g = []
for j in range(1, n):
g1 = [(i - 1, d, k) for i, d, k in g if i > 0 and s[i - 1] == s[j]]
g2 = []
r = -j
for i, d, k in g1:
if i - r != d:
g2.append((i, i - r, 1))
if k > 1:
g2.append((i + d, d, k - 1))
else:
g2.append((i, d, k))
r = i + (k - 1) * d
if j > 1 and s[j - 1] == s[j]:
g2.append((j - 1, j - 1 - r, 1))
r = j - 1
g2.append((j, j - r, 1))
g = []
for i, d, k in g2:
if not g or g[-1][1] != d:
g.append((i, d, k))
else:
g[-1] = (g[-1][0], g[-1][1], g[-1][2] + k)
for i, d, k in g:
r = i + (k - 1) * d
m = [0, pl[r - 1][0], pl[r - 1][1]]
if k > 1:
# m[0] += gpl[i - d][0]
m[1] += gpl[i - d][1]
m[2] += gpl[i - d][2]
if d <= i:
gpl[i - d][1] = m[1]
gpl[i - d][2] = m[2]
# pl[j][0] += m[0]
pl[j][1] += m[1]
pl[j][2] += m[2]
return (pl, g)
pl, g = pal(input())
accum = list(itertools.accumulate([i[-1] for i in pl]))
ans = 0
for i, d, k in g:
for j in range(k):
if i + d * j > 1:
ans += accum[i + d * j - 2]
print(ans)
りあん