首页 > 试题广场 >

小美走公路

[编程题]小美走公路
  • 热度指数:2830 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
有一个环形的公路,上面共有n站,现在给定了顺时针第i站到第i+1站之间的距离(特殊的,也给出了第n站到第 1 站的距离)。小美想沿着公路第x站走到第y站,她想知道最短的距离是多少?

输入描述:
第一行输入一个正整数n,代表站的数量。
第二行输入n个正整数a_i,前n-1个数代表顺时针沿着公路走,i站到第i+1站之间的距离;最后一个正整数代表顺时针沿着公路走,第n站到第 1 站的距离。·
第三行输入两个正整数xy,代表小美的出发地和目的地。
1\leq n \leq 10^5
1\leq a_i \leq 10^9
1\leq x,y \leq n


输出描述:
一个正整数,代表小美走的最短距离。
示例1

输入

3
1 2 2
2 3

输出

2
示例2

输入

3
1 2 2
1 3

输出

2
为什么只过了26/30 ,为什么还有四个过不了?
n=int(input())
list1=list(map(int,input().split()))
a,b=map(int,input().split())
if a>b:
    a,b=b,a
ans1=0
ans2=0
for i in range(a,b):
    ans1+=list1[i-1]
for i in range(a,2,-1):
    ans2+=list1[i-2]
for i in range(n-1,b-2,-1):
    ans2+=list1[i]
if ans1<ans2:
    print(ans1)
else:
    print(ans2)
编辑于 2024-03-25 21:17:43 回复(2)
python, 一个环形问题,主要可以分为两条路,一条是正向,一条是反向。第一步利用记录从每个点到原所需的路程。最后只需要找出dis1[y]-dis1[x],sum(arr)-dis1[y]+dis1[x]两个值中的最小值就可以。
def sol(n,arr,x,y):

    if x>=y: 
        x,y = y-1,x-1
    else:
        x,y = x-1,y-1
    dis1 = [0]*n
    for i in range(1,n):
        dis1[i] = arr[i-1]+dis1[i-1]
    return min(dis1[y]-dis1[x],sum(arr)-dis1[y]+dis1[x])

while 1:
    try:
        n = int(input())
        arr = list(map(int,input().split()))
        x,y = map(int,input().split())
        ans = sol(n,arr,x,y)
        print(ans)
    except:
        break


发表于 2023-10-21 02:44:46 回复(0)
N = int(input())

dis = [int(x) for x in input().split()]

location = [int(y) for y in input().split()]

distance_1 = 0
distance_2 = 0

for i in range(min(location)-1,max(location)-1):
    distance_1 +=  dis[i]
    dis[i] = 0
distance_2 = sum(dis)

print(min(distance_1,distance_2))


编辑于 2023-09-15 19:33:39 回复(0)
importsys
 
n = sys.stdin.readlines()
num_station = int(n[0])
dist = n[1].strip().split()
mindist = n[2].strip().split()
start = int(mindist[0])
end = int(mindist[1])
res = float("inf")
res2 = float("inf")
res3 = float("inf")
res4 = float("inf")
ifstart > end:
    res2 = 0
    res3 = 0
    fori in range(start-1,num_station):
        res2 += int(dist[i])
    fori in range(0,end-1):
        res2 += int(dist[i])
    start,end = end,start
    fori in range(start-1,end-1):
        res3 += int(dist[i])
else:
    res = 0
    res4 = 0
    fori in range(start-1,end-1):
        res += int(dist[i])
    start,end = end,start
    fori in range(start-1,num_station):
        res4 += int(dist[i])
    fori in range(0,end-1):
        res4 += int(dist[i])
final= min(res,res2,res3,res4)
print(final)


编辑于 2023-08-18 18:34:57 回复(0)