結果
| 問題 |
No.1139 Slime Race
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-31 17:51:39 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 528 ms / 2,000 ms |
| コード長 | 1,665 bytes |
| コンパイル時間 | 159 ms |
| コンパイル使用メモリ | 82,380 KB |
| 実行使用メモリ | 118,884 KB |
| 最終ジャッジ日時 | 2025-03-31 17:52:33 |
| 合計ジャッジ時間 | 7,059 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 22 |
ソースコード
def compute_f(T, N, x, v):
if N == 0:
return 0
active_t_start = 0
active_speed = v[0]
active_x_start = x[0]
active_contrib = 0
merged_contrib = 0
non_merged_contrib = 0
for i in range(1, N):
xi = x[i]
vi = v[i]
denominator = vi - active_speed
if denominator >= 0:
collision_time = float('inf')
else:
numerator = (active_x_start - xi) - active_speed * active_t_start
collision_time = numerator / denominator
if collision_time > T or collision_time < active_t_start:
non_merged_contrib += vi * T
else:
active_contrib += active_speed * (collision_time - active_t_start)
merged_contrib += vi * collision_time
active_t_start = collision_time
active_x_start = active_x_start + active_speed * (collision_time - active_t_start)
active_speed += vi
active_contrib += active_speed * (T - active_t_start)
total = active_contrib + merged_contrib + non_merged_contrib
return total
def find_min_T(N, D, x, v):
low = 0
high = 2 * 10**18 # A sufficiently large upper bound
while low < high:
mid = (low + high) // 2
current_f = compute_f(mid, N, x, v)
if current_f >= D:
high = mid
else:
low = mid + 1
return low
# Read input
import sys
input = sys.stdin.read().split()
idx = 0
N = int(input[idx])
idx +=1
D = int(input[idx])
idx +=1
x = list(map(int, input[idx:idx+N]))
idx +=N
v = list(map(int, input[idx:idx+N]))
print(find_min_T(N, D, x, v))
lam6er