代码如下
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int n,m,a,b,sum=0;//sum是整个环路的长度
scanf("%d",&n);//输入出口数
if(n<3||n>10e5) return 1;//非法输入
int d[n+1],d1[n+1];//d[n+1]记录题中所述的Di,d1[i]记录出口i到出口1的顺时钟距离(i=1,2...n)
for(int i=1;i<n+1;i++){
scanf("%d",d+i);
d1[i]=sum;
sum+=d[i];
}
scanf("%d",&m);//输入出口查询对数
if(m>10e4||m<0) return 1;//非法输入
while(m--){
scanf("%d%d",&a,&b); //输入出口号码对
if(a>b) swap(a,b); //确保a<b
printf("%d\n",min(d1[b]-d1[a],sum-(d1[b]-d1[a])));//d1[b]-d1[a]是两出口对的顺时针距离,sum-(d1[b]-d1[a])是两出口对的的逆时针距离
}
return 0;
}