結果
| 問題 | No.1413 Dynamic Sushi |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-09-15 07:42:26 |
| 言語 | PyPy3 (7.3.23 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 632 ms / 4,000 ms |
| + 753µs | |
| コード長 | 1,313 bytes |
| 記録 | |
| コンパイル時間 | 71 ms |
| コンパイル使用メモリ | 81,408 KB |
| 実行使用メモリ | 85,888 KB |
| 最終ジャッジ日時 | 2026-09-15 07:42:39 |
| 合計ジャッジ時間 | 13,116 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 25 |
ソースコード
import math
n, w = map(lambda s_: int(s_), input().split())
sushi = [tuple(map(lambda s_: int(s_), input().split())) for _ in range(n)]
sushi.append((0, 0, 0, 0, 0))
def pos_when(i, t):
x, y, r, v, a = sushi[i]
theta = (v * t + a) * math.pi / 180
return x + r * math.cos(theta), y + r * math.sin(theta)
def next_time(v, t0, nv):
p = pos_when(v, t0)
def pred(dt):
np = pos_when(nv, t0 + dt)
d = (p[0] - np[0]) ** 2 + (p[1] - np[1]) ** 2
return d <= (w * dt)**2
# if pred(0):
# return t0
ng = 0
ok = 1e-5
c = 0
while not pred(ok):
ng, ok = ok, ok * 2
c += 1
for _ in range(30 + c):
mi = (ng + ok) / 2
if pred(mi):
ok = mi
else:
ng = mi
return t0 + ok
oo = 1e1000
n2 = 1 << n + 1
dp = [[oo] * n2 for _ in range(n + 1)]
dp[n][1 << n] = 0
for bit in range(n2):
done = [i for i in range(n + 1) if bit >> i & 1]
todo = [i for i in range(n + 1) if ~bit >> i & 1]
for v in done:
dpi = dp[v][bit]
if dpi == oo:
continue
for nv in todo:
ndpi = next_time(v, dpi, nv)
nbit = bit | 1 << nv
dp[nv][nbit] = min(dp[nv][nbit], ndpi)
ans = min(dp[v][-1] for v in range(n))
print(f"{ans:.20f}")