IDEA:
求圆环中两点距离最短
1.时间限制是考查点;
2.在输入两点之间距离的同时,计算每个点到点1 的距离
3.计算两点间的最短距离,正向(或反向)的大个最短,如圆环总长-正向距离=反向距离。
CODE
#include<iostream>
#include<cstdio>
#include<vector>
#include<fstream>
using namespace std;
int main(){
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
#endif
int n,m;
scanf("%d",&n);
vector<int> dis(n+1);
int sum=0;
for(int i=1;i<=n;i++){
int d;
scanf("%d",&d);
dis[i]=sum;
sum+=d;
}
scanf("%d",&m);
for(int i=0;i<m;i++){
int st,end;
scanf("%d %d",&st,&end);
int mindis;
if(st>end){
mindis=dis[st]-dis[end];
}else{
mindis=dis[end]-dis[st];
}
if(sum-mindis<mindis){
printf("%d\n",sum-mindis);
}else{
printf("%d\n",mindis);
}
}
#ifndef ONLINE_JUDGE
fclose(stdin);
#endif
return 0;
}