📄 trip2.pas
字号:
program trip2(input,output);
const max=1000;
type recordtype=record price,content:real end;
var i,j,n,point,tail:longint;
content,change,distance2,money,use:real;
price,distance,consume:array[0..max] of real;
oil:array [0..max] of recordtype;
begin
assign(input,'trip.in');
assign(output,'trip.out');
reset(input);
rewrite(output);
readln(distance[0],content,distance2,price[0],n);
distance[n+1]:=distance[0];
for i:=1 to n do readln(distance[i],price[i]);
distance[0]:=0;
for i:=n downto 0 do consume[i]:=(distance[i+1]-distance[i])/distance2;
{计算相邻两站间的油耗}
for i:=0 to n do
if consume[i]>content then
begin writeln('No Solution'); halt end;
money:=0; tail:=1; change:=0;
oil[tail].price:=price[0]*2;
oil[tail].content:=content;
for i:=0 to n do
begin
point:=tail;
while (point>=1) and (oil[point].price>=price[i]) do
begin
change:=change+oil[point].content;
point:=point-1
end;
tail:=point+1;
oil[tail].price:=price[i];
oil[tail].content:=change;
use:=consume[i]; point:=1;
while (use>1e-6) and (point<=tail) do
if use>=oil[point].content
then begin
use:=use-oil[point].content;
money:=money+oil[point].content*oil[point].price;
point:=point+1
end
else begin
oil[point].content:=oil[point].content-use;
money:=money+use*oil[point].price;
use:=0
end;
for j:=point to tail do oil[j-point+1]:=oil[j];
tail:=tail-point+1;
change:=consume[i]
end;
writeln(money:0:2);
close(input);
close(output)
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -