Question and Answer from L4-M2
def min_time(X, S, R, t, segments):
all_segments = []
last = 0
# Add segments including gaps between walkways
for start, end, w in segments:
if start > last:
all_segments.append((last, start, 0))
all_segments.append((start, end, w))
last = end
if last < X:
all_segments.append((last, X, 0))
detailed_segments = []
for start, end, w in all_segments:
length = end - start
total_speed = S + w
detailed_segments.append((total_speed, length, w))
# Sort by total_speed ascending to use running time optimally
detailed_segments.sort()
total_time = 0.0
remaining_run_time = t
for total_speed, length, w in detailed_segments:
if remaining_run_time > 0:
run_speed = R + w
time_to_run_entire_segment = length / run_speed
max_distance_run = remaining_run_time * run_speed
if max_distance_run >= length:
total_time += time_to_run_entire_segment
remaining_run_time -= time_to_run_entire_segment
else:
distance_run = max_distance_run
distance_walk = length - distance_run
total_time += remaining_run_time
total_time += distance_walk / total_speed
remaining_run_time = 0
else:
total_time += length / total_speed
return round(total_time, 3)
def main():
# Read first line of inputs
X, S, R, t, N = map(int, input("Enter X S R t N: ").split())
segments = []
print("Enter the segments (Bi Ei Wi):")
for _ in range(N):
Bi, Ei, Wi = map(int, input().split())
segments.append((Bi, Ei, Wi))
result = min_time(X, S, R, t, segments)
print(f"{result:.3f}")
if __name__ == "__main__":
main()