1046 Shortest Distance (20分)
The task is really simple: given N exits on a highway which forms a simple cycle, you are supposed to tell the shortest distance between any pair of exits.
Sample Input:
5 1 2 4 14 9
3
1 3
2 5
4 1
Sample Output:
3
10
7
题意:
找到环形路径两点之间的最短距离。
#include<iostream>
#include<algorithm>
using namespace std;
long long a[100000];
int main(){
long long n;
long long sum=0;
cin>>n;
// 求出来每个节点到达零点的距离
for(int i=1;i<=n;i++){
cin>>a[i];
sum+=a[i];
a[i]=sum-a[i];
}
long long m;
cin>>m;
while(m--){
long long h,e;
cin>>h>>e;
if(h>e)swap(h,e);
// 将两个点到达1点的距离相减得到两点之间的距离。
long long ans=a[e]-a[h];
// 因为是个环形路径所以可以用sum-ans 可以得到逆向距离。
if(sum-ans>ans)cout<<ans<<endl;
else cout<<sum-ans<<endl;
}
return 0;
}