网易实习生编程题2

本文解析了一道关于计算最短到达时间的编程题,通过将问题转化为数学计算,避免了复杂的分情况讨论,提供了简洁高效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这道题一开始想复杂了,导致通过率只有90%,其实就是一个数学问题,time = walkTime*D(user,taxi)+taxiTime*D(taxi,Destination),找出所有time的最小值就行了。

要好好分析问题。

#coding= utf-8
#2017网易实习编程第二道 通过90%
#还要考虑:车离人近但是离目的地远的情况,所以这道题应该直接算出所有可能的时间,然后找到最小值。
#分情况讨论是复杂的,直接转化为数学问题比较简单,要学会简化问题

n = int(raw_input()) #出租车个数
tx = raw_input()  #所有出租车横坐标
ty = raw_input() #所有出租车纵坐标
des = raw_input() #目的地横纵坐标
time = raw_input() #步行时间 出租车时间

tx = tx.split()
ty = ty.split()
des = des.split()
des[0] = int(des[0])
des[1] = int(des[1])
time = time.split()
wt = int(time[0]) #走路时间
tt = int(time[1]) #taxi时间
for i in xrange(len(tx)):
    tx[i] = int(tx[i])
    ty[i] = int(ty[i])

#计算步行时间
lengh = abs(des[0])+abs(des[1])
walkt = lengh*wt
#TAXI时间
to_taxi = [] #存放人到出租车的距离
for i in xrange(n):
    to_taxi.append(abs(tx[i])+abs(ty[i]))
taxi_des = [] #对应存放出租车至目的地的距离
for i in xrange(n):
    taxi_des.append(abs(des[0]-tx[i])+abs(des[1]-ty[i]))
time = [] #存放所有可能的时间
for i in xrange(n):
    time.append(wt*to_taxi[i]+tt*taxi_des[i])
result = min(time)
print result

'''
min_len = min(taxi_dis) #距离最近的车距离
#若存在距离相同的情况
same = []
index = []
if taxi_dis.count(min_len) > 1:
    for i in xrange(n):
        if taxi_dis[i] == min_len:
            tmp = abs(tx[i]-des[0])+abs(ty[i]-des[1])
            same.append(tmp)
    result = min(same)
else:
    min_index = taxi_dis.index(min(taxi_dis)) #该车对应的坐标
    #该出租车据des距离
    tax_len = abs(tx[min_index]-des[0])+abs(ty[min_index]-des[1])
    taxit = tax_len*tt +wt*min_len
    result = min([walkt,taxit])
'''




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值