题目大意:给出目的地的距离,给出油箱大小,每升油跑多少路,加油站数量,计算怎么花钱最少到目的地。
思路:首先找出这些加油站,从后往前找,每次找这箱油距离内最便宜的加油站,然后计算这些加油站分别要加多少油,也就是加不加满。如果它比后一个加油站便宜,就加满。
测试点2是个特殊情况,如果第一个加油站不是0.0,直接输出The maximum travel distance = 0.00
n1,n2,n3,n4=list(map(int,input().split()))
l=[]
for i in range(n4):
l.append(list(map(float,input().split())))
n5=n1*n3
l2=[]
def a(len1,l):
global l2
l1=[]
for i in range(len(l)):
if len1-l[-1-i][1]<=n5:
l1.append(l[-1-i])
else:
break
if l1!=[]:
l1.sort(key=lambda x:x[0])
n6=l1[0][1]
l2.append(l1[0])
a(n6,l[:l.index(l1[0])])
l.sort(key=lambda x:(x[1],x[0]))
if l[0][1]==0.0:
s=''
for i in range(n4-1):
if l[i+1][1]-l[i][1]>n5:
s='The maximum travel distance = '+'{:.2f}'.format(l[i][1]+n5)
break
if s=='':
if n2-l[n4-1][1]>n5:
s = 'The maximum travel distance = ' + '{:.2f}'.format(l[n4-1][1] + n5)
if s=='':
a(n2,l)
l2.sort(key=lambda x:x[1])
sumprice=0
len1=0
for i in range(len(l2)-1):
n7=l2[i+1][0]-l2[i][0]
if n7>0:
sumprice+=(l2[i][1]+n5-len1)*l2[i][0]/n3
len1=l2[i][1]+n5
else:
sumprice+=(l2[i+1][1]-len1)*l2[i][0]/n3
len1=l2[i+1][1]
sumprice+=(n2-len1)*l2[-1][0]/n3
print('{:.2f}'.format(sumprice))
else:
print(s)
else:
print(s)
else:
print('The maximum travel distance = 0.00')