这道题一开始想复杂了,导致通过率只有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])
'''