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.
Especificación de 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,10
5]), seguido de N número entero distancias D 1D 2 ⋯ D N, donde D iis la distancia entre el i -ésimo y el (i + 1) salidas -sT, y D N 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 M positivo (≤10 7), 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 10 ^ 7
.
Especificación de la salida:
Para cada caso de prueba, imprimir los 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
Salida de muestra:
3
10
7
Sujeto al efecto:
- Cada punto de entrada rodeado por un anillo, en el que la distancia entre dos puntos de valor de entrada adyacente
- El cálculo de la distancia mínima de dos puntos
ideas:
- Primer cálculo de secuencia positiva, menos del total, comparar
#include <stdio.h>
const int MAXN=100010;
int array[MAXN];
int array1[MAXN];
void swap(int &a,int &b){
a=a^b;
b=a^b;
a=a^b;
}
int main(){
int n;
scanf("%d",&n);
int s=0;
for(int i=1;i<=n;i++){
scanf("%d",&array[i]);
s+=array[i];
array1[i]=s;
}
int m;
scanf("%d",&m);
while(m--!=0){
int a,b;
scanf("%d%d",&a,&b);
if(a>b)swap(a,b);
int sum=0;
sum = array1[b-1]-array1[a-1];
sum = sum<s-sum?sum:s-sum;
printf("%d\n",sum);
}
}