Hormigas (problema de colisión elástica)

Titulo

Un ejército de hormigas camina sobre un poste horizontal de longitud l cm, cada una con una velocidad constante de 1 cm / s. Cuando una hormiga caminante llega al final del poste, inmediatamente se cae. Cuando dos hormigas se encuentran, regresan y comienzan a caminar en direcciones opuestas. Conocemos las posiciones originales de las hormigas en el poste, desafortunadamente, no sabemos las direcciones en las que caminan las hormigas. Su tarea es calcular los tiempos posibles más tempranos y más recientes necesarios para que todas las hormigas se caigan del poste.

Entrada

La primera línea de entrada contiene un número entero que da el número de casos que siguen. Los datos para cada caso comienzan con dos números enteros: la longitud del poste (en cm) yn, el número de hormigas que residen en el poste. Estos dos números son seguidos por n enteros que dan la posición de cada hormiga en el poste como la distancia medida desde el extremo izquierdo del poste, sin ningún orden en particular. Todos los enteros de entrada no son mayores que 1000000 y están separados por espacios en blanco.

Salida

Para cada caso de entrada, salida dos números separados por un solo espacio. El primer número es el tiempo más temprano posible cuando todas las hormigas se caen del poste (si las direcciones de sus caminatas se eligen adecuadamente) y el segundo número es el último tiempo posible.

Entrada de muestra

2
10 3
2 6 7
214 7
11 12 7 13 176 23 191

Salida de muestra

4 8
38 207

Generalizar

Hay hormigas que se arrastran en el palo de madera. La velocidad de cada hormiga es de 1 unidad de longitud por segundo. Ahora se le da la posición inicial de todas las hormigas (la dirección del movimiento de la hormiga es indecisa). El tiempo más corto y más largo para que todas las hormigas suelten el palo.

Ideas

Primero, si hay una colisión, cada hormiga tendrá dos opciones: la complejidad de la violencia es exponencial.

El problema es que la dirección después de la colisión es muy abrumadora, ¡pero podemos encontrar claramente que después de que cada hormiga choca, la velocidad no cambia!

Entonces podemos pensar en ellos como caminar cruzado después de la colisión, para deshacernos del problema de girar.

La idea es clara, el código es fácil de escribir y se obtiene el tiempo para que cada hormiga vaya directamente a los dos extremos. Solo se puede tomar una de estas dos veces como el tiempo de la hormiga, y finalmente se puede tomar el tiempo de la última hormiga. En el menor tiempo, cada hormiga es la más pequeña y la más grande es lo contrario.

Código

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn=1000000+5;
int L,n,a[maxn];
int main(){
//	freopen("1.in","r",stdin);
	int t;
	scanf("%d",&t);
	while(t--){
		memset(a,0,sizeof(a));
		scanf("%d%d",&L,&n);
		for(int i=1;i<=n;++i){
			scanf("%d",&a[i]);
		}
		int Min=0,Max=0;
		for(int i=1;i<=n;++i){
			Min=max(Min,min(a[i],L-a[i]));
			Max=max(Max,max(a[i],L-a[i]));
		}
		printf("%d %d\n",Min,Max);
	}
	return 0;
} 

Supongo que te gusta

Origin www.cnblogs.com/Lour688/p/12702832.html
Recomendado
Clasificación