結果
| 問題 |
No.1950 片道きゃっちぼーる
|
| コンテスト | |
| ユーザー |
lilictaka
|
| 提出日時 | 2022-05-21 00:25:47 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,012 ms / 3,000 ms |
| コード長 | 913 bytes |
| コンパイル時間 | 277 ms |
| コンパイル使用メモリ | 82,304 KB |
| 実行使用メモリ | 257,304 KB |
| 最終ジャッジ日時 | 2024-09-20 10:44:05 |
| 合計ジャッジ時間 | 13,587 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 23 |
ソースコード
from collections import defaultdict,deque
N = int(input())
X = list(map(int,input().split()))
A = list(map(int,input().split()))
vec = set()
for i in range(N):
x = X[i]
a = A[i]
vec.add(x)
vec.add(x-a)
vec.add(x+a)
memo = defaultdict(int)
vec = sorted(list(vec))
for i in range(len(vec)):
memo[vec[i]] = i
edge = [[] for _ in range(len(vec))]
Xset = set(X)
for i in range(N):
x = X[i]
a = A[i]
index = memo[x+a]
edge[index].append(memo[x])
index2 = memo[x-a]
edge[index2].append(memo[x])
INF = float('inf')
dp = [-INF for _ in range(len(vec))]
q = deque()
for v in vec[::-1]:
if dp[memo[v]] == -INF:
q.append(memo[v])
dp[memo[v]] = v
while q:
now = q.popleft()
for nv in edge[now]:
if dp[nv] == -INF:
q.append(nv)
dp[nv] = v
for x in X:
index = memo[x]
print(dp[index]-x)
lilictaka