A1046.Shortest Distance

来源:互联网 发布:知乎的产品流程设计图 编辑:程序博客网 时间:2024/06/05 18:40

题目如下:
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.

输入格式:
Each input file contains one test case. For each case, the first line contains an integer N (in [3, 10^5]), followed by N integer distances D1 D2 … DN, where Di is the distance between the i-th and the (i+1)-st exits, and DN is between the N-th and the 1st exits. All the numbers in a line are separated by a space. The second line gives a positive integer M (<=10^4), with M lines follow, each contains a pair of exit numbers, provided that the exits are numbered from 1 to N. It is guaranteed that the total round trip distance is no more than 10^7.
[简要翻译:每个输入包含一个测试样例。对于每一个测试样例,第一行包含一个整数N,然后跟着N个距离整数D1 D2 …….DN,Di表示第i个节点和第i+1个节点的距离,以此类推形成循环距离。第一行的每一个数用空格间隔开。第二行给出一个表示测试样例数量的正整数M,之后跟着M行,每行包含两个整数(1~N)用于测试求解。应该要保证总的往返距离不大于10^7]

输出格式:
For each test case, print your results in M lines, each contains the shortest distance between the corresponding given pair of exits.

输入样例:
5 1 2 4 14 9
3
1 3
2 5
4 1

输出样例:
3
10
7

题意:
有N个结点围成一个圈,相邻两个点之间的距离已知,且每次只能移动到相邻结点。然后给出M个询问,每个询问给出两个数字A和B即结点编号(1<=A,B<=N),求从A号结点到B号结点的最短距离。

样例解释:
这里写图片描述

思路:

注意点:

代码:

#include <iostream>  #include <fstream>  using namespace std;  ifstream fin("in.txt");  #define cin fin  int main()  {      int n;      cin>>n;      int* dis = new int[n+1];      int d;      int i;      int sum = 0;      for(i=0;i<n;i++)      {          cin>>d;          dis[i+1] = sum;          sum = sum + d;      }      int m;      cin>>m;      int begin,end;      int total;      for(i=0;i<m;i++)      {          cin>>begin>>end;          if(begin>end)          {              total = dis[begin]-dis[end];          }else          {              total = dis[end]-dis[begin];          }          if(sum-total > total)          {              cout<<total<<endl;          }else          {              cout<<sum-total<<endl;          }      }      system("PAUSE");      return 0;  }