結果
| 問題 |
No.465 PPPPPPPPPPPPPPPPAPPPPPPPP
|
| コンテスト | |
| ユーザー |
りあん
|
| 提出日時 | 2020-11-23 06:28:49 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,958 ms / 2,000 ms |
| コード長 | 1,462 bytes |
| コンパイル時間 | 528 ms |
| コンパイル使用メモリ | 82,452 KB |
| 実行使用メモリ | 303,928 KB |
| 最終ジャッジ日時 | 2024-07-23 17:19:01 |
| 合計ジャッジ時間 | 13,753 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| 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)
# pl[j] = 0
for i, d, k in g:
r = i + (k - 1) * d
m = [0, pl[r - 1][0], pl[r - 1][1]]
if k > 1:
for l in range(3):
m[l] += gpl[i - d][l]
if d <= i:
gpl[i - d] = m
for l in range(3):
pl[j][l] += m[l]
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)
りあん