Codeup cementerio - Problema E: la distancia más corta (20)

título Descripción

La tarea es muy sencilla: dado N salidas en una carretera que forma un ciclo simple, que se supone que deben decir la distancia más corta entre cualquier par de salidas.

entrada

Cada archivo de entrada contiene un caso de prueba. Para cada caso, la primera línea contiene un número entero N (en [3, 105]), seguido de N número entero distancias D1 D2 ... DN, donde Di es la distancia entre el i-ésimo y el (i + 1) - st salidas, y DN es entre el N-ésimo y el 1er salidas. Todos los números en una línea están separadas por un espacio. La segunda línea da un número entero positivo M (<= 104), con M líneas siguen, cada uno contiene un par de números de la salida, siempre que las salidas están numeradas de 1 a N. Se garantiza que la distancia total de ida y vuelta no es más de 107.

exportación

Para cada caso de prueba, imprimir sus resultados en M líneas, cada una contiene la distancia más corta entre el correspondiente par de salidas dado.

entrada de la muestra

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

Ejemplo de salida

3
10
7
#include <stdio.h>

int main()
{
    int sum=0,sum1,sum2,n,m,head,tail,a[100001];
    scanf("%d",&n);
    for(int i=0; i<n; i++)
    {
        scanf("%d",&a[i]);
        sum+=a[i];      //求出环内总距离长sum
    }
    scanf("%d",&m);     //m组求值数据
    for(int i=0; i<m; i++)
    {
        sum1=0;
        scanf("%d %d",&head,&tail);
        if(head>tail)     //进行调整,总是求顺时针的值
        {
            int tmp=head;
            head=tail;
            tail=tmp;
        }
        for(int j=head-1; j<=tail-2; j++)  //顺时针的值sum1
            sum1+=a[j];
        sum2=sum-sum1;   //逆时针的值sum2
        if(sum2<sum1)    //输出顺时针与逆时针的最小值
            printf("%d\n",sum2);
        else
            printf("%d\n",sum1);
    }
    return 0;
}

El resultado:

Publicados 462 artículos originales · ganado elogios 55 · vistas 320 000 +

Supongo que te gusta

Origin blog.csdn.net/LY_624/article/details/88764019
Recomendado
Clasificación