A1046 distancia más corta (20 分)

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);
		
	}
} 
Publicado 91 artículos originales · ganado elogios 9 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/WeDon_t/article/details/105150943
Recomendado
Clasificación