PAT-A-1046 Shortest Distance

The task is really simple: given N exits on a highway which forms a simple cycle, you are supposed to tell the shortest distance between any pair of exits.

Input Specification:

Each input file contains one test case. For each case, the first line contains an integer N (in [3,105]), followed by N integer distances D1 D2 ⋯ D**N, where D**i is the distance between the i-th and the (i+1)-st exits, and D**N is between the N-th and the 1st exits. All the numbers in a line are separated by a space. The second line gives a positive integer M (≤104), with M lines follow, each contains a pair of exit numbers, provided that the exits are numbered from 1 to N. It is guaranteed that the total round trip distance is no more than 107.

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:

1
2
3
4
5
5 1 2 4 14 9
3
1 3
2 5
4 1

Sample Output:

1
2
3
3
10
7

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <algorithm>
using namespace std;

int main(){
int n;
scanf("%d",&n);
int *dis = new int[n+1];//存放1号顶点到i号顶点的距离
int *A = new int[n+1];//存放输入的边
int sum;//存储总的距离


for(int i=1;i<=n;i++){
scanf("%d",&A[i]);
sum+=A[i];
dis[i]=sum;
}

int ans;
scanf("%d",&ans);
int v1,v2,distance;
while(ans--){
//输入顶点v1和V2
scanf("%d%d",&v1,&v2);
if(v1>v2)swap(v1,v2);
int temp = dis[v2-1]-dis[v1-1];
printf("%d\n",min(temp,sum-temp));
}

return 0;
}

----\(˙<>˙)/----赞赏一下吧~