题目描述
分析:
求最短距离,但是每个点只能到达相邻点,dis[i]表示1号点按顺时针方向到达i号点顺时针方向的下一个点的距离,sum表示一圈的总距离,对于每次查询,比较dis(left,right)和sum-(left,right),取最小值
#include<cstdio>
#include<algorithm>
using namespace std;
int dis[100005];
int main(){
int sum=0;
int n,x;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&x);
sum+=x;
dis[i]=sum;
}
int query;
scanf("%d",&query);
int left,right;
while(query--){
scanf("%d%d",&left,&right);
if(left>right){
swap(left,right);
}
printf("%d\n",min(dis[right-1]-dis[left-1],sum-(dis[right-1]-dis[left-1])));
}
}