A1046.Shortest Distance

题目如下:
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号结点的最短距离。

样例解释:
A1046.Shortest Distance_第1张图片

思路:

注意点:

代码:

#include   
#include   

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;icin>>d;  
        dis[i+1] = sum;  
        sum = sum + d;  
    }  

    int m;  
    cin>>m;  
    int begin,end;  
    int total;  
    for(i=0;icin>>begin>>end;  
        if(begin>end)  
        {  
            total = dis[begin]-dis[end];  
        }else  
        {  
            total = dis[end]-dis[begin];  
        }  

        if(sum-total > total)  
        {  
            cout<else  
        {  
            cout<"PAUSE");  
    return 0;  
}  

你可能感兴趣的:(CCF/Leetcode/算法)