結果

問題 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
権限があれば一括ダウンロードができます

ソースコード

diff #

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)
0