結果
| 問題 | 
                            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)