Output Specification:
For each test case, print your results in M lines, each contains the shortest distance between the corresponding given pair of exits.
Sample Input:
5 1 2 4 14 9
3
1 3
2 5
4 1
Sample Output:
3
10
7
解法
这题思路比较简单,因为路径是环形,相当于算一算正向两个点之间的距离,如果小于总距离和的一半,那说明正向的就是最小距离,否则用总距离和减一下就是答案。
坑点在于,如果每次计算距离时都再循环加一次,那么花费的时间会大大延长。这也是第三个测试点超时的原因。因此,一开始输入时就要在一次循环中,计算总距离和,并记录从第一个点到每个点的正向距离。那么在每次计算距离时,只要用dist[b]-dist[a],就是ab两点的正向距离值了。
n = [int(i) for i in input().split()]
s = 0
slist = [0]
for i in range(1, n[0]+1):
s += n[i]
slist.append(s)
m = int(input())
for i in range(m):
a, b = [int(i) for i in input().split()]
# 如果a > b,交换位置
if b < a:
a, b = b, a
# 不再用循环累加的方式
ts = slist[b-1] - slist[a-1]
if ts < s * 0.5:
print(ts)
else:
print(s - ts)