题目描述
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.
输入
输出
For each test case, print your results in M lines, each contains the shortest distance between the corresponding given pair of exits.
样例输入
5 1 2 4 14 9
3
1 3
2 5
4 1
样例输出
3
10
7
代码展示
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int MAX = 100000;
int dist[MAX]; // dist数组用来存放从第一个点开始顺向与各个点的距离
int main()
{
int n, m;
int total = 0; // total用来记录整个环的长度
int temp; // temp暂存每次输入的两点间的距离
int begin, end;
scanf("%d", &n);
dist[1] = 0;
for(int i = 1; i <= n; i++) {
scanf("%d", &temp);
total += temp;
dist[i + 1] = dist[i] + temp;
}
scanf("%d", &m);
while(m--) {
scanf("%d%d", &begin, &end);
temp = abs(dist[end] - dist[begin]);
printf("%d\n", min(temp, total - temp)); // 只需比较顺向和逆向两个方向
}
return 0;
}