解法一:前缀和
以第一个点为起点,沿着一个方向,计算前缀和得到坐标和整个环的长度,然后就可以得到任意两个点沿两个方向的距离。
#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";}}
