http://pat.zju.edu.cn/contests/pat-a-practise/1046
dis[1]: 1-2的距离
dis[2]: 1-3的距离
.
.
dis[n-1]: 1-n的距离
dis[n]: 1-n-1的距离 即,整个环的长度,正着走的距离+反着走的距离=环长
#include <stdio.h>
#include <string.h>
int dis[100010];
int getMinDis(int x,int y,int n)
{
if (x>y) //只算小到大
{
int tmp=y;
y=x;
x=tmp;
}
int halfSum=dis[n]/2;
int d;
if (x==1)
{
d=dis[y-1];
}
else
{
d=dis[y-1]-dis[x-1]; //
}
if (d>halfSum) //正着走距离大于一半,得到反着走的距离(更小)
{
d=dis[n]-d;
}
return d;
}
int main()
{
int n,m,i,ans;
scanf("%d",&n);
int sum=0;
for (i=1;i<=n;i++)
{
scanf("%d",&dis[i]);
sum+=dis[i];
dis[i]=sum;
}
scanf("%d",&m);
while (m--)
{
int x,y;
scanf("%d%d",&x,&y);
ans=getMinDis(x,y,n);
printf("%d\n",ans);
}
return 0;
}