結果

問題 No.1950 片道きゃっちぼーる
ユーザー SidewaysOwlSidewaysOwl
提出日時 2022-05-21 00:29:41
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,200 bytes
コンパイル時間 162 ms
コンパイル使用メモリ 81,816 KB
実行使用メモリ 167,808 KB
最終ジャッジ日時 2023-10-20 15:15:52
合計ジャッジ時間 7,366 ms
ジャッジサーバーID
(参考情報)
judge13 / judge12
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 39 ms
55,616 KB
testcase_01 AC 38 ms
55,616 KB
testcase_02 AC 36 ms
55,616 KB
testcase_03 AC 212 ms
165,952 KB
testcase_04 AC 278 ms
166,592 KB
testcase_05 AC 89 ms
55,616 KB
testcase_06 AC 183 ms
149,020 KB
testcase_07 AC 217 ms
165,916 KB
testcase_08 AC 261 ms
165,672 KB
testcase_09 WA -
testcase_10 WA -
testcase_11 AC 282 ms
165,688 KB
testcase_12 AC 281 ms
165,692 KB
testcase_13 AC 237 ms
144,744 KB
testcase_14 AC 214 ms
144,352 KB
testcase_15 WA -
testcase_16 AC 192 ms
145,612 KB
testcase_17 AC 37 ms
55,616 KB
testcase_18 AC 269 ms
167,636 KB
testcase_19 WA -
testcase_20 AC 254 ms
165,556 KB
testcase_21 AC 240 ms
165,380 KB
testcase_22 AC 241 ms
165,364 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

n = int(input())
x = list(map(int,input().split()))
a = list(map(int,input().split()))
xx = {}
for i in range(n):
    xx[x[i]] = i
from collections import deque
def dfs():
    vis = [-1] * n
    vis_max_idx = [-1] * n
    for i in range(n):
        if vis[i] == -1:
            q = deque([(x[i],x[i])])
            dist_max = 0
            while q:
                node,dist = q.popleft()
                idx = xx[node]
                dist = node + a[idx]
                dist_max = max(dist_max ,dist)
                vis[idx] = i
                if a[idx] + node in xx:
                    if vis[xx[a[idx] + node]] != -1:
                        dist_max = max(dist_max, vis_max_idx[vis[xx[a[idx] + node]]])
                    else:
                        q.append((a[idx] + node,dist))
                if node - a[idx]  in xx:
                    if vis[xx[node - a[idx]]] != -1:
                        dist_max = max(dist_max , vis_max_idx[vis[xx[node - a[idx] ]]])
                    else:
                        q.append((node - a[idx] ,dist))
            vis_max_idx[i] = dist_max
    return vis,vis_max_idx
vis,vis_max_idx = dfs()
for i in range(n):
    print(vis_max_idx[vis[i]]-x[i])
0