题目翻译:
任务真的很简单:一条高速公路上有N个出口,这N个出口构成了一个环,说出任意两个出口之间的最短距离。
输入要求:
每个输入文件包含一个测试用例。 对于每种情况,第一行包含一个整数N(取值在3到10的5次方),接下来是N个用整数表示的距离D1、D2…Dn,Di是第i个出口与第(i + 1)个出口之间的距离,Dn是第n个出口与第1个出口之间的距离。一行中的所有数字都用空格分隔。 第二行给出一个正整数M(≤10000),紧随其后的是M行,每行包含一对出口编号,但前提是出口的编号是从1到N,保证环形总距离不超过10的7次方。
输出要求:
对于每个测试用例,将结果打印成M行,每行包含对应的给定出口对之间的最短距离。
样例输入:
5 1 2 4 14 9
3
1 3
2 5
4 1
样例输出:
3
10
7
#include<iostream>
using namespace std;
int b[10005] = {
0 };
int a[100005] = {
0 };
int distant[100005] = {
0 };
int main()
{
int n;
cin >> n;
int sum = 0;
int v;
for (int i = 1; i <= n; i++)
{
cin >> v;
a[i] = v;
sum += v; // 环形距离总长度
distant[i] = sum; // 提前求和数组
}
int m;
cin >> m;
int c, d;
for (int i = 1; i <= m; i++)
{
cin >> c >> d;
if (c > d) swap(c, d);
int sum1 = 0, sum2 = 0;
sum1 = distant[d - 1] - distant[c - 1];
sum2 = sum - sum1;
if (sum1 > sum2) b[i] = sum2;
else b[i] = sum1;
}
for (int i = 1; i <= m; i++)
cout << b[i] << endl;
system("pause");
return 0;
}