結果
| 問題 |
No.2354 Poor Sight in Winter
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-06-13 13:10:40 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 575 ms / 2,000 ms |
| コード長 | 2,142 bytes |
| コンパイル時間 | 533 ms |
| コンパイル使用メモリ | 82,124 KB |
| 実行使用メモリ | 80,356 KB |
| 最終ジャッジ日時 | 2025-06-13 13:10:49 |
| 合計ジャッジ時間 | 8,686 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 26 |
ソースコード
from sys import stdin,setrecursionlimit#,set_int_max_str_digits
#import pypyjit
#pypyjit.set_param('max_unroll_recursion=-1')
setrecursionlimit(20000000) # これこどふぉだと無理
#set_int_max_str_digits(200010)
mod = 998244353
ii = lambda :int(stdin.readline())
mi = lambda :map(int,stdin.readline().split())
li = lambda :list(mi())
gmi = lambda :map(lambda x: int(x) - 1, stdin.readline().split())
gi = lambda :list(map(lambda x: 0 if x == "." else 1,input())) # グリッド入力受け取り
py = lambda :print("Yes")
pn = lambda :print("No")
pf = lambda :print("First")
ps = lambda :print("Second")
vec = [(1,0),(-1,0),(0,-1),(0,1)]
vec1 = [(1,0),(1,1),(0,1),(-1,1),(-1,0),(-1,-1),(0,-1),(1,-1)] #8方向
inf = 2*10**18
from collections import defaultdict,deque
from heapq import heappop,heappush,heapify
def c(i,j):
return abs(d[i][0]-d[j][0]) + abs(d[i][1]-d[j][1])
def dijkstra(g,start,n):
"""
g:グラフ、strat:始点,n:頂点数 -> 距離のリスト
"""
inf = 10**18
dist = [inf]*n
dist[start] = 0
kakutei = [0]*n
que = []
heappush(que,(0,start))
while que:
d,v = heappop(que)
if kakutei[v]:
continue
kakutei[v] = 1
for i,c in g[v]:
if dist[i] > dist[v] + c:
dist[i] = dist[v] + c
heappush(que,(dist[i],i))
return dist
n,k = mi()
sx,sy,gx,gy = mi()
s = [sx,sy]
g = [gx,gy]
d = [li() for _ in range(n)]
d.append(s)
d.append(g)
def solve(x):
kakutei = [0]*(n+2)
dist = [inf]*(n+2)
que = []
heappush(que,(0,n))
dist[n] = 0
while que:
d,v = heappop(que)
if kakutei[v]:
continue
kakutei[v] = 1
for i in range(n+2):
if i == v:
continue
cost = (c(i,v)+x-1)//x - 1
if dist[i] > dist[v] + cost:
dist[i] = dist[v] + cost
heappush(que,(dist[i],i))
return dist[-1] <= k
ok = 2*10**6
ng = 0
while abs(ok-ng) > 1:
mid = (ok+ng)//2
if solve(mid):
ok = mid
else:
ng = mid
print(ok)