結果
問題 |
No.2375 watasou and hibit's baseball
|
ユーザー |
![]() |
提出日時 | 2025-03-31 17:29:45 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,658 bytes |
コンパイル時間 | 212 ms |
コンパイル使用メモリ | 82,596 KB |
実行使用メモリ | 276,152 KB |
最終ジャッジ日時 | 2025-03-31 17:30:38 |
合計ジャッジ時間 | 5,457 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 35 TLE * 1 |
ソースコード
import sys from collections import deque def main(): n, A, B = map(int, sys.stdin.readline().split()) balls = [] for _ in range(n): x, y, k = map(int, sys.stdin.readline().split()) balls.append((x, y, k)) # Precompute distance and K differences between all pairs dist = [[0] * n for _ in range(n)] K_diff = [[0] * n for _ in range(n)] for i in range(n): for j in range(n): dist[i][j] = abs(balls[i][0] - balls[j][0]) + abs(balls[i][1] - balls[j][1]) K_diff[i][j] = abs(balls[i][2] - balls[j][2]) # DP dictionary: key=(mask, a_prev, b_prev), value=length dp = dict() queue = deque() for i in range(n): mask = 1 << i key = (mask, -1, i) dp[key] = 1 queue.append(key) max_len = 1 # At least one ball is thrown visited = set() while queue: key = queue.popleft() if key in visited: continue visited.add(key) mask, a_prev, b_prev = key current_len = dp[key] m = bin(mask).count('1') for k in range(n): if (mask & (1 << k)) == 0: new_mask = mask | (1 << k) new_m = m + 1 j = new_m condition_met = False if j == 2: # Check j=2: previous is b_prev (single element) d = dist[b_prev][k] kd = K_diff[b_prev][k] if d >= A or kd >= B: condition_met = True else: if j >= 3: # Check j >=3 kd = K_diff[b_prev][k] if kd >= B: condition_met = True else: # Check sum of distances to previous two d1 = dist[k][b_prev] d2 = dist[k][a_prev] if (d1 + d2) >= A: condition_met = True if condition_met: new_a = b_prev new_b = k new_key = (new_mask, new_a, new_b) if new_key not in dp or dp[new_key] < new_m: dp[new_key] = new_m if new_m > max_len: max_len = new_m if new_key not in visited: queue.append(new_key) print(max_len) if __name__ == "__main__": main()