Editorial Interprepas ENP Fase Local Primer Nivel ETE 2025-26

Revision en12, by RacsoFractal, 2026-02-20 20:11:12

¡Hola chicos! Muchas gracias por participar. Esta es la primera ocasión en la que el Club de Programación Competitiva de la Facultad de Ingeniería (CPCFI) escribe problemas originales para un concurso, y nos hizo muchísima ilusión que los resolvieran.

Para quienes tengan curiosidad, todos los protagonistas de los problemas son personas que pertenecen al CPCFI. Somos una comunidad muy unida y nos hace mucha gracia verlos como protagonistas de los problemas. Esperamos que en algún momento de sus carreras consideren unirse al club, que siempre tendrá las puertas abiertas para gente que busque desafíos complicados y una comunidad unida que los apoyará incondicionalmente.

Les deseamos lo mejor en su formación personal y profesional, y esperamos verlos de nuevo en la fase final.

Agradecimientos especiales a GusTimeTraveler con quien trabajé en partes iguales para la creación de problemas como miembro académico y problemsetter oficial del CPCFI. También queremos agradecer a todos los testers de los problemas, que nos ayudaron a afinar detalles y a corregir errores: ELeon, AlexJzG, lamocha, Nitter, salazarislas.daniel, Warddd,AldoEZ_21, zum, eve181836.

671143A. Piedra, papel o tijera

El problema es uno clásico de implementación.

La idea general se puede resumir en verificar quién fue la ganadora de cada ronda y llevar la cuenta de cuántas veces ganó cada quién en la totalidad del enfrentamiento. Finalmente, la información del output solicitado se resume a un condicional con los contadores que se hayan manejado.

Para hacer ésto, hay un par de alternativas.

La forma más obvia de hacerlo es leyendo las dos cadenas y acomodar condicionales hasta descifrar la conclusión que nos interesa: Eve gana, Ale gana o empataron. Llevando la cuenta de cuántas veces ganó cada quién, es muy fácil decidir al final quién ganó todas las rondas (el contador que sea mayor), que es lo que se pide como salida.

El siguiente código es una solución válida para el problema haciendo exactamente lo descrito.

Solución en Java

Esta implementación se puede simplificar un poco si se ve de cierta forma. Pues no es necesario evaluar toda la cadena si se puede hacer con un caracter simbólico. Para el caso, se puede notar que las palabras 'Piedra', 'Papel' y 'Tijeras' difieren las tres en el tercer carácter, evitando tener que comparar toda la cadena, cosa que en lenguaje C puede ser especialmente útil. Entonces es posible checar únicamente ese carácter y simplificando los condicionales a algo equivalente obtenemos la siguiente solución válida también.

Solución en C

Finalmente, se puede hacer la misma lógica con un único contador. Si en cada comparación sumas '+1' si Eve gana, y restas '-1' si Ale gana, el resultado final está en ver el signo del contador. Algo así es lo que se hace en la siguiente solución.

Solución en Python

671143B. Entrenamiento de equipo I

Este problema es de implementación. Supongamos que el input se guarda en tres arreglos: m, a y l, uno con el registro de cada competidor.

La forma más lenta de hacerlo es en complejidad $$$O(N^2)$$$, si para el i-ésimo día se calcula la suma acumulada recorriendo desde el día 1 hasta el i. Teniendo la suma acumulada de los problemas resueltos por cada competidor hasta el i-ésimo día, se puede imprimir el nombre de cualquier miembro del equipo cuya suma acumulada sea la máxima entre los tres.

Aunque por las restricciones del problema esta estrategia es válida, también se puede llevar la suma acumulada in situ para cada iteración. Otra forma de hacerlo, es haciendo un prefix sum con los arreglos.

La complejidad final alcanzable es $$$O(N)$$$, como se puede ver en las siguientes soluciones.

Solución en C (Prefix Sum)
Solución en Java (Suma In Situ)

671143C. Acomodo cuadrático

Pista 1
Pista 2
Solución
Código en C
Código en Python
Otra solución más eficiente
Código en Python (Vieta)

671143D. El billar no es de vagos II

Para este problema no es necesario estar familizarizado con los conceptos físicos presentados. Con leer atentamente el statement, el lector podrá hacer una serie de sustituciones entre las fórmulas brindadas que llevarán a una expresión final sencilla de programar.

La distancia total recorrida por la bola de billar no es más que la suma de la distancia recorrida por la bola en cada tiro, lo cual se puede calcular despejando la variable 'd' de la ecuación brindada del MRUA:

$$$ d = \frac{v^2 - v_0^2}{2a} $$$

De aquí se deduce que la velocidad final es cero, pues Gus siempre espera a que la pelota se deje de mover antes de darle el siguiente golpe:

$$$ v = 0 $$$

La aceleración se puede calcular como dice en el enunciado, de la segunda ley de Newton como el cociente entre la fuerza de fricción generada entre la bola de billar y la mesa, entre la masa de la bola de billar. Sustituyendo variables tenemos que:

$$$ a = \frac{F_f}{m} = \frac{- \mu m G}{m} = - \mu G $$$

La velocidad inicial se puede calcular tal cual dice el enunciando:

$$$ v_0 = \frac{I}{m} $$$

Sustituyendo todo en el despeje de la distancia inicial, tenemos que:

$$$ d = \frac{v^2 - v_0^2}{2a} = \frac{0^2 - (\frac{I}{m})^2}{2(- \mu G)} $$$

Simplificando:

$$$ d = \frac{I^2}{2m^2 \mu G} $$$

Fórmula que ya es bastante sencilla de programar.

Por otro lado, para calcular la distancia final de la bola de billar se pide, de nuevo, sumar el desplazamiento en los rectangulares que tuvo la bola tras cada tiro de Gus. Lo cual se puede hacer tal cual las fórmulas presentadas.

La precisión para este problema es muy chica, dado que no se espera que el lector esté familiarizado con el manejo de variables reales de alta precisión, como se puede ver en la siguientes soluciones, utilizar variables de tipo float será suficiente.

Solución en C

671143E. Hazlos primos I

Pista 1
Pista 2
Solución
Código en C
Solución esperada
Código en C (solución esperada)
Código en Java (solución esperada)

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en13 English RacsoFractal 2026-02-20 20:42:58 20 Tiny change: 'n concurso, y nos hi' -> 'n concurso para media superior, y nos hi'
en12 English RacsoFractal 2026-02-20 20:11:12 0 (published)
en11 English RacsoFractal 2026-02-20 20:08:02 12 Tiny change: 'ser:AldoEZ21], [user' -> 'ser:AldoEZ_21], [user'
en10 English RacsoFractal 2026-02-20 20:07:17 364
en9 English RacsoFractal 2026-02-20 20:05:30 18121 Tiny change: '-ésimo día. Teniendo las tres sumas, se puede' -> '-ésimo día, se puede'
en8 English RacsoFractal 2026-02-19 03:52:28 2027
en7 English RacsoFractal 2026-02-19 03:29:51 281
en6 English RacsoFractal 2026-02-18 03:31:37 4203 Tiny change: 'n Java">\n\n<pre><co' -> 'n Java">\n<pre><co'
en5 English RacsoFractal 2026-02-17 19:51:32 384
en4 English RacsoFractal 2026-02-17 19:41:37 75
en3 English RacsoFractal 2026-02-17 19:28:34 9
en2 English RacsoFractal 2026-02-17 19:23:47 957
en1 English RacsoFractal 2026-02-17 19:06:42 175 Initial revision (saved to drafts)