

Một xe tải xuất phát từ A và đi đến B với khoảng cách d km. Biết xe tải bắt đầu từ A với lượng nhiên liệu = 0
Trên quãng đường từ A đến B, có n trạm xăng với trạm xăng thứ i cách A x[i] và có giá p[i]/L
Khi xe đổ đầy xăng, xe đi được tối đa C km.
Giả sử 1L đi được 1km, tìm cách đi đến B sao cho chi phí rẻ nhất.
Input: dòng 1: số nguyên dương n, d, C
n dòng tiếp theo là các số x[i] và p[i] cách nhau một khoảng trắng
Output: Chi phí ít nhất có thể để đi hết từ A đến B
Ví dụ test:
INP:
4 10 4
2 10
0 20
7 15
5 25
OUT: 150
(giải thích: từ km0, đổ vừa đủ đến km2 -> giá 20*2 = 40.
Từ km2, đổ đầy bình đến km5, còn thừa 1L -> giá 10*4 = 40
Từ km5, đổ vừa đủ đến km7, do đã có sẵn 1L nên chỉ cần đổ 1L = 25.
Từ km7 đến km10 thì đổ vừa đủ để đến nơi là 15*3 = 45
tổng = 25 + 40 + 40 + 45 = 150)
Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
Tại mỗi trạm xăng hiện tại, bạn nhìn về phía trước trong tầm đi được tối đa C km.
Trường hợp 1: Nếu có trạm xăng nào giá rẻ hơn trạm hiện tại, bạn chỉ đổ vừa đủ xăng để đi đến trạm rẻ hơn gần nhất đó.
Trường hợp 2: Nếu không có trạm nào rẻ hơn, trạm hiện tại là rẻ nhất trong vùng, bạn hãy đổ đầy bình xăng để tận dụng giá rẻ, sau đó đi đến trạm tiếp theo.
Nếu khoảng cách giữa hai trạm kế tiếp lớn hơn C km thì xe không thể đến đích, kết quả sẽ là -1. Chúng ta coi điểm đích B là một trạm xăng ở vị trí d với giá bằng 0.Dưới đây là mã nguồn Python toàn bộ bằng chữ thường và văn bản thuần túy không định dạng:import sysdef solve():
input_data = sys.stdin.read().split()
if not input_data:
returnn = int(input_data[0])
d = int(input_data[1])
C = int(input_data[2])stations = []
idx = 3
for _ in range(n):
x = int(input_data[idx])
p = int(input_data[idx+1])
stations.append((x, p))
idx += 2stations.sort(key=lambda s: s[0])
stations.append((d, 0))if stations[0][0] > 0:
print(-1)
returnfor i in range(len(stations) - 1):
if stations[i+1][0] - stations[i][0] > C:
print(-1)
returntotal_cost = 0
current_fuel = 0
i = 0
num_stations = len(stations)while i < num_stations - 1:
curr_x, curr_p = stations[i]
next_cheaper_idx = -1for j in range(i + 1, num_stations):
if stations[j][0] - curr_x <= C:
if stations[j][1] < curr_p:
next_cheaper_idx = j
break
else:
breakif next_cheaper_idx != -1:
dist_needed = stations[next_cheaper_idx][0] - curr_x
fuel_to_buy = max(0, dist_needed - current_fuel)
total_cost += fuel_to_buy * curr_p
current_fuel = current_fuel + fuel_to_buy - dist_needed
i = next_cheaper_idx
else:
fuel_to_buy = C - current_fuel
total_cost += fuel_to_buy * curr_p
dist_to_next = stations[i+1][0] - curr_x
current_fuel = C - dist_to_next
i += 1print(total_cost)if name == 'main':
solve()
Hãy giúp mọi người biết câu trả lời này thế nào?
Bảng tin