Compartir tema R

Título: Hay hormigas arrastrándose en un 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 no está determinada). Encuentra el tiempo más corto y el más largo para que todas las hormigas suelten el palo.

Análisis: (En realidad, hice una pregunta similar sobre Luogu hace mucho tiempo, parece que se llama Dumuqiao)

Considere el proceso de conocer a dos personas y el mejor valor del resultado final.

La posición de la primera persona es x1, y la posición de la segunda persona es x2, donde x2> x1

Hay dos situaciones en las que dos personas se enfrentan a izquierda y derecha, respectivamente.

  1. La primera persona mira a la izquierda, la segunda persona mira a la izquierda

  Obviamente, el tiempo para que la primera persona caiga es x1, el tiempo para que la segunda persona caiga es x2, el tiempo total es x2

  2. La primera persona mira hacia la izquierda, la segunda persona mira hacia la derecha

  Obviamente, el tiempo para que la primera persona caiga es x1, el tiempo para que la segunda persona caiga es l-x2, el tiempo total es máximo (l-x2, x1)

  3. La primera persona mira hacia la derecha, la segunda persona mira hacia la derecha

  Obviamente, el tiempo para que la primera persona caiga es l-x1, el tiempo para que la segunda persona caiga es l-x2, el tiempo total es máximo (l-x1, l-x2)

  4. La primera persona mira hacia la derecha, la segunda persona mira hacia la izquierda

  Esto no es obvio, por lo que se encontrarán y darán la vuelta. Primero, cuando se encuentran es (x2-x1) / 2, la posición donde se encuentran es (x1 + x2) / 2, regresan y caen respectivamente El tiempo es (x1 + x2) / 2 y l- (x1 + x2) / 2

  Entonces el tiempo total es el valor máximo de (x2-x1) / 2 + (x1 + x2) / 2 y (x2-x1) / 2 + l- (x1 + x2) / 2, la simplificación es max (x2, l -x1)

  Entonces, el tiempo más corto es min (x2, max (l-x2), max (l-x1, l-x2), max (x2, l-x1)), el valor máximo es el mismo y luego está relacionado con x1 <x2, Es fácil encontrar que el resultado es realmente min (max (x1, l-x1), max (x2, l-x2)) y max (max (x1, l-x1), max (x2, l-x2))

  En otras palabras, el valor mínimo es minimizar el máximo (xi, l-xi) de todos, y el valor máximo es tomar el máximo

 Por supuesto, hay otra comprensión, es decir, dos personas son completamente equivalentes, y el encuentro es en realidad equivalente a dos personas que se cruzan, por lo que también puede escribir esta fórmula

Código:

1 #include <cstdio>
 2 #include <algorithm>
 3  usando el  espacio de nombres std;
4  
5  int main ()
 6  {
 7      int t, l, n, i, a;
8      scanf ( " % d " , & t);
9      while (t-- )
 10      {
 11          scanf ( " % d% d " , & l, & n);
12          int minanes = 0 , maxans = 0 ;
13          para (i = 0 ; i <n; i ++)
 14          {
 15              scanf ( " % d " , & c );
16              amenaza = max (amenazante, min (a, l a));
17              maxans = max (maxans max (a, l a));
18          }
 19          printf ( " % d% d \ n " , amenazando, maxans);
20      }
 21      de retorno  0 ;
22 }

 

  

Supongo que te gusta

Origin www.cnblogs.com/lin4xu/p/12705974.html
Recomendado
Clasificación