PAT(甲级)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.

Input Specification:

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 D​1​​ D​2​​ ⋯ D​N​​, where D​i​​ is the distance between the i-th and the (i+1)-st exits, and D​N​​ 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​​.

Output Specification:

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

Sample Input:

5 1 2 4 14 9
3
1 3
2 5
4 1

Sample Output:

3
10
7

大意:就是输入一个环的节点个数以及相邻节点之间的距离,计算给出节点之间最近的距离。

简析:就是算出环的总长以及给定之间的距离,然后比较给定之间的距离和环的另一个方向走的距离的长度,然后输出比较小的。这道题设置了一个坑就是后面不能一个一个加,即使设置了短的路径一个一个加也会超时,所以在输入长度时就把特定点到1号点的距离算出来,到时候直接找特定点然后减一下就可以了,时间复杂度就为O(1),不会超时。

#include<iostream>
#include<vector>
using namespace std;
int main()
{
    int n;
    cin >> n;
    vector<int> num(n+1, 0);
    num[0] = 0;
    int sum = 0;
    for (int i = 1; i <=n;i++)
    {
        int a;
        cin >> a;
        sum += a;
        num[i] = sum;
    }
    int k;
    cin >> k;
    vector<int> dis(k, 0);
    int cnt = 0;
    int q = k;
    while(k--)
    {
        int a, b;
        cin >> a >> b;
        int temp = 0;
        if(a>b)
        {
            int tem = a;
            a = b;
            b = tem;
        }
        a = (a - 1)%n;
        b = (b - 1) % n;
        temp = num[b] - num[a];
        if(temp<sum-temp)
            dis[cnt++] = temp;
        else
            dis[cnt++] = (sum - temp);
        }
    for (int i = 0; i < q;i++)
        cout << dis[i] << '\n';
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_35601980/article/details/89173428