1033 To Fill or Not to Fill (25分) python

题目大意:给出目的地的距离,给出油箱大小,每升油跑多少路,加油站数量,计算怎么花钱最少到目的地。
思路:首先找出这些加油站,从后往前找,每次找这箱油距离内最便宜的加油站,然后计算这些加油站分别要加多少油,也就是加不加满。如果它比后一个加油站便宜,就加满。
测试点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')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值