結果
問題 |
No.962 LCPs
|
ユーザー |
|
提出日時 | 2019-12-22 12:16:16 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 162 ms / 2,000 ms |
コード長 | 689 bytes |
コンパイル時間 | 307 ms |
コンパイル使用メモリ | 81,944 KB |
実行使用メモリ | 86,376 KB |
最終ジャッジ日時 | 2024-09-14 03:00:17 |
合計ジャッジ時間 | 7,530 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 64 |
ソースコード
#!/usr/bin/python if __name__ == '__main__': N = int(input()) S = [input() for i in range(N)] a = [0 for i in range(N - 1)] for i in range(N - 1): tmp = min(len(S[i]), len(S[i + 1])) for j in range(tmp): if S[i][j] != S[i + 1][j]: break a[i] = j + 1 ans = 0 for s in S: ans += len(s) nxt = [len(a) for i in range(len(a))] for i in range(len(a) - 1, -1, -1): now = i + 1 while now < len(a): if a[now] < a[i]: break now = nxt[now] nxt[i] = now for i in range(len(a)): now = i while now < len(a) and a[now] > 0: S, T = now - i + 2, nxt[now] - i + 1 L = (S + T) * (T - S + 1) // 2 ans += L * a[now] now = nxt[now] print(ans)