結果
| 問題 |
No.2179 Planet Traveler
|
| コンテスト | |
| ユーザー |
MasKoaTS
|
| 提出日時 | 2022-11-30 16:43:08 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 770 ms / 3,000 ms |
| コード長 | 1,566 bytes |
| コンパイル時間 | 182 ms |
| コンパイル使用メモリ | 81,792 KB |
| 実行使用メモリ | 133,376 KB |
| 最終ジャッジ日時 | 2024-11-30 16:30:12 |
| 合計ジャッジ時間 | 12,192 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 26 |
ソースコード
import itertools as iter
import collections as coll
import heapq as hq
import bisect as bis
from decimal import Decimal as dec
from functools import cmp_to_key
import math
import sys
#import pypyjit
#pypyjit.set_param('max_unroll_recursion=-1')
sys.setrecursionlimit(10 ** 6)
inp = sys.stdin.readline
input = lambda : inp().rstrip()
getN = lambda : int(inp())
getNs = lambda : map(int, inp().split())
getList = lambda :list(map(int, inp().split()))
getStrs = lambda n : [input() for _ in [0] * n]
def yexit(): print("Yes"); exit(0)
def nexit(): print("No"); exit(0)
pi = 3.141592653589793
mod = 1000000007
MOD = 998244353
INF = 4611686018427387903
dx = [1, 0, -1, 0]; dy = [0, 1, 0, -1]
#di = coll.defaultdict(int)
"""
Main Code
"""
n = getN()
planet = [getList() for _ in [0]*n]
def isqrt(n):
ok = 0
ng = n + 1
while(ng - ok > 1):
mid = (ok + ng) >> 1
if(mid * mid <= n):
ok = mid
else:
ng = mid
return ok
route = [[] for _ in [0]*n]
for i in range(n-1):
for j in range(i+1, n):
p1 = planet[i]
p2 = planet[j]
dist = (p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2
if(p1[2] != p2[2]):
r1 = p1[0] ** 2 + p1[1] ** 2
r2 = p2[0] ** 2 + p2[1] ** 2
dist = r1 + r2 - isqrt(4 * r1 * r2)
route[i].append((j,dist))
route[j].append((i,dist))
dp = [10 ** 18] * n
dp[0] = 0
que = [(0, 0)]
while(que):
d_now, v_now = hq.heappop(que)
if(v_now == n-1):
print(d_now)
exit(0)
for v_next, dist in route[v_now]:
d_next = max(d_now, dist)
if(d_next >= dp[v_next]):
continue
dp[v_next] = d_next
hq.heappush(que, (d_next, v_next))
MasKoaTS