結果
問題 |
No.2330 Eat Slime
|
ユーザー |
![]() |
提出日時 | 2025-06-12 20:58:50 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,396 bytes |
コンパイル時間 | 231 ms |
コンパイル使用メモリ | 82,664 KB |
実行使用メモリ | 175,276 KB |
最終ジャッジ日時 | 2025-06-12 21:02:48 |
合計ジャッジ時間 | 6,799 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 5 TLE * 1 -- * 24 |
ソースコード
import bisect def main(): import sys input = sys.stdin.read data = input().split() ptr = 0 N = int(data[ptr]) ptr += 1 M = int(data[ptr]) ptr += 1 X = int(data[ptr]) ptr += 1 C = list(map(int, data[ptr:ptr+N])) ptr += N # Convert C to 1-based index C = [0] + C sumY = dict() for _ in range(M): A_j = int(data[ptr]) ptr += 1 B_j = int(data[ptr]) ptr += 1 Y_j = int(data[ptr]) ptr += 1 key = (A_j, B_j) if key not in sumY: sumY[key] = 0 sumY[key] += Y_j # Preprocess for each B, the list of i's where C_i = B from collections import defaultdict pos = defaultdict(list) for i in range(1, N+1): b = C[i] pos[b].append(i) # Sort the lists for binary search for b in pos: pos[b].sort() delta = [0] * (N + 1) for (A, B), y in sumY.items(): if B not in pos: continue lst = pos[B] idx = bisect.bisect_left(lst, A) for i in lst[idx:]: k = i - A if 0 <= k <= N: delta[k] += y max_score = 0 for k in range(0, N+1): score = X * k + delta[k] if score > max_score: max_score = score print(max_score) if __name__ == "__main__": main()