結果
問題 |
No.515 典型LCP
|
ユーザー |
![]() |
提出日時 | 2025-06-12 12:54:08 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,336 bytes |
コンパイル時間 | 414 ms |
コンパイル使用メモリ | 82,036 KB |
実行使用メモリ | 101,556 KB |
最終ジャッジ日時 | 2025-06-12 12:57:59 |
合計ジャッジ時間 | 4,938 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 11 TLE * 4 |
ソースコード
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()