結果
| 問題 | 
                            No.515 典型LCP
                             | 
                    
| コンテスト | |
| ユーザー | 
                             gew1fw
                         | 
                    
| 提出日時 | 2025-06-12 18:05:58 | 
| 言語 | PyPy3  (7.3.15)  | 
                    
| 結果 | 
                             
                                TLE
                                 
                             
                            
                         | 
                    
| 実行時間 | - | 
| コード長 | 1,336 bytes | 
| コンパイル時間 | 179 ms | 
| コンパイル使用メモリ | 81,928 KB | 
| 実行使用メモリ | 109,484 KB | 
| 最終ジャッジ日時 | 2025-06-12 18:07:32 | 
| 合計ジャッジ時間 | 4,818 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge2 / judge4 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | -- * 2 | 
| other | TLE * 2 -- * 13 | 
ソースコード
import sys
def main():
    sys.setrecursionlimit(1 << 25)
    n = int(sys.stdin.readline())
    strings = [sys.stdin.readline().strip() for _ in range(n)]
    base = 911382629
    mod = 10**18 + 3
    prefix_hashes = []
    lengths = []
    for s in strings:
        m = len(s)
        lengths.append(m)
        ph = [0] * (m + 1)
        for i in range(m):
            ph[i+1] = (ph[i] * base + ord(s[i])) % mod
        prefix_hashes.append(ph)
    M, x, d = map(int, sys.stdin.readline().split())
    sum_lcp = 0
    for _ in range(M):
        current_x = x
        div = n - 1
        i = (current_x // div) + 1
        j_remainder = current_x % div
        j = j_remainder + 1
        if i > j:
            i, j = j, i
        else:
            j += 1
        a = i - 1
        b = j - 1
        ph_a = prefix_hashes[a]
        ph_b = prefix_hashes[b]
        len_a = lengths[a]
        len_b = lengths[b]
        max_possible = min(len_a, len_b)
        low, high, res = 0, max_possible, 0
        while low <= high:
            mid = (low + high) // 2
            if ph_a[mid] == ph_b[mid]:
                res = mid
                low = mid + 1
            else:
                high = mid - 1
        sum_lcp += res
        x = (current_x + d) % (n * (n - 1))
    print(sum_lcp)
if __name__ == '__main__':
    main()
            
            
            
        
            
gew1fw