結果
問題 |
No.1139 Slime Race
|
ユーザー |
![]() |
提出日時 | 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))