結果
| 問題 |
No.464 PPAP
|
| コンテスト | |
| ユーザー |
りあん
|
| 提出日時 | 2020-12-18 22:17:56 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 55 ms / 2,000 ms |
| コード長 | 1,549 bytes |
| コンパイル時間 | 110 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 11,904 KB |
| 最終ジャッジ日時 | 2024-09-21 09:27:12 |
| 合計ジャッジ時間 | 1,774 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 22 |
ソースコード
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)
りあん