题意
一条环形路径,给出路径上每个点到下个点的距离。求给定两点之间的最短距离。
注意点
- 如果直接往两个方向遍历,最后会超时
题解
可以存储一个方向的从起点到每个点的距离,然后存储一个总距离total,另一种方式的距离就是做差
#include <stdio.h>
#include <algorithm>
using namespace std;
const int maxn = 100010;
int main() {
int n, exit[maxn], sum[maxn] = {0}, total = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &exit[i]);
total += exit[i];
if (i) sum[i] = sum[i-1] + exit[i - 1];
}
int m, e1, e2;
scanf("%d", &m);
for (int i = 0; i < m; i++) {
scanf("%d%d", &e1, &e2);
int a = min(e1, e2);
int b = max(e1, e2);
int sum1 = 0, sum2 = 0;
sum1 = sum[b - 1] - sum[a - 1];
sum2 = total - sum1;
printf("%d\n", min(sum1, sum2));
}
return 0;
}