解法一:前缀和
以第一个点为起点,沿着一个方向,计算前缀和得到坐标和整个环的长度,然后就可以得到任意两个点沿两个方向的距离。
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int N;
cin >> N;
int sum[N + 1];
sum[1] = 0;
for (int i = 2; i <= N; ++i) {
cin >> sum[i];
sum[i] += sum[i - 1];
}
int total;
cin >> total;
total += sum[N];
int M, x, y, dis1, dis2;
cin >> M;
for (int i = 0; i < M; ++i) {
cin >> x >> y;
dis1 = abs(sum[x] - sum[y]);
dis2 = total - dis1;
cout << min(dis1, dis2) << "\n";
}
}