INSTRUCCIONES: Programas que resolverán según la categoría: PRIMARIA: Problema 1 y 2 SECUNDARIA Y OMI: Problema 3 y 4 PREUNIVERSITARIOS Y UNIVERSITARIOS: Problemas 4 y 5 SECUNDARIA (examen extra) Problema 6 1. En el archivo datos.txt debes colocar tu nombre, escuela, id, categoría. Mas sin embargo no es obligatorio 2. Si tienes dudas del examen envíalas a roa@solacyt.org o manda SMS al 331343-4858 o 331280-0177, las aclaraciones y respuestas a las preguntas se publicarán SOLO aquí en este artículo (más abajo) o por twitter, que se estará actualizando periódicamente 3. Debes responder solo los problemas que te corresponden, no hay puntos extras por contestar otros problemas de otra categoría 4. Si eres de Primaria, tú examen será de KAREL y son 2 problemas y valen 100 puntos en total. 5. Si eres de cualquier otra categoría, tu examen será de C/C++ y son 2 Problemas, ( 100 puntos en total ) puedes utilizar el compilador que gustes ( recomendamos Dev CPP ), Recuerda que en tu programa no deberá haber mensajes de saludo, bienvenida, adornos, ni mensajes de salida de adorno, limítate a solicitar datos de manera directa pues tu código será evaluado de forma automática, no uses librerías que no sean tipo standard y te pedimos al final de tu programa no incluyas mensajes que detengan o pause en programa tipo system("pause") 6. Cuando tengas listo tu problema puedes enviarlo, seleccionando el problema a enviar y pegando tu código en la caja de texto del sistema de envíos 7. Puedes enviar tu problema en más de una ocasión, pero cada vez que envíes el mismo problema, este valdrá 10 puntos menos 8. Se evaluará solo el último envió de cada problema. 9. Puedes enviar tus problemas por email ( omijal@gmail.com ) pero SOLO en caso de emergencias, incluyendo tu ID y categoría, pero todo envió por email tendrá un castigo del 20% por lo cual te invitamos a usar el sistema automático de envíos de Karel.
10. Solo si surgen problemas en el sistema de envíos, se publicaría un MENSAJE en este sitio indicando se envíen al email, así que es bueno tengas una copia de respaldo en tu computadora 11. Tu examen deberá enviarse en cualquier antes del lunes 26 de marzo, antes de las 10:01 horas. 12. En el caso de detectar irregularidades en tu examen (códigos similares, ip similares, etc.) se turnará el caso al Comité de Honor y Justicia de OMIJAL y corres el riesgo de ser descalificado, incluso suspendido de Concursos posteriores
1: Precipicio (precip.txt) POR: M. FERNANDO GUZMAN Karel nuestro campeón nacional, frecuentemente se caia de la cama al dormir, pero acaba de comprar en Mercado Libre un sensor contra caídas, y necesita que le ayudes a programarlo. Ayuda a Karel a localizar programas su sensor que le permitirá detenerse justo antes de caerse de la cama para dejar ahí su almohada como señal y entonces poder regresar a su posición original y volver a dormir. CONSIDERACIONES Karel se ubicara en la esquina izquierda de su cama sin saber la orientación Karel odia caerse de la cama Karel inicia con 1 zumbador en su mochila Karel deberá detenerse en la última posición de la cama, dejar su almohada y regresar a la posición y orientación original La Cama siempre es recta La orientación final de Karel debe ser la misma de como inicio. EJEMPLO Ejemplo 1 Ejemplo 2 Entrada 1 Entrada 2 Salida 1 Salida 2
2: Salvado (salvado.txt) POR: M. FERNANDO GUZMAN Karel está preocupado por que ha llegado el temporal de lluvia y está cayendo una tormenta de locos, varios karelianos están a punto de ahogarse. Ayuda a Karel a localizar a todos los habitantes de karelandia y llevarlos al nivel superior del mundo que es un rectángulo. CONSIDERACIONES El mundo es rectangular y delimitado con paredes. Karel se ubicará en el exterior del mundo sobre la pared superior. No sabemos la orientación inicial de Karel. Los habitantes de karelandia están representados con 1 zumbador Los habitantes siempre están pegados a la pared. No existen habitantes en las esquinas. No importa la posición donde deje Karel a los habitantes salvados, siempre y cuando sea sobre la pared superior. No importa la posición final de Karel Ejemplo 1 Ejemplo 2 Entrada 1 Entrada 2 Salida 1 Salida 2
3: C-mbradios (cembradio.cpp ó cmbradio.c) POR: JOSE LUIS ROA GARCIA DE LA PAZ Karel ha decidido estudiar el doctorado en ciencias de los zumbadores, así que en uno de sus temas de investigación decidió atacar el problema del sembrado de la gran variedad existente de zumbadores en la sierra de omijalandia (como dato cultural una planta de zumbadores administra desde 1 hasta 5 000,000 zumbadores), para lo cual le pidió a los habitantes de ese lugar la información de la cantidad de zumbadores por planta y la cantidad de toneladas de esa planta recolectados en un año; todo esto para poder saber cual es el valor promedio de zumbadores producidos por año para así poder realizar un análisis económico para la exportación de este producto a Karelostotitlan. Ayuda al Dr. Karel a encontrar el valor promedio de zumbadores producidos por año, utilizando para ello un programa escrito en C/C++. Línea 1: valor N (1<=N<=1000) que indica la cantidad de datos capturados por el Dr. Karel Línea de la 2 a la N+1: Valores X (1<=X<=5000000) y Z (1<=Z<=20000000), los cuales se encuentran separados por un espacio entre ellos, en el cual X indica la cantidad de zumbadores producidos por esa planta y Z nos marca las toneladas recolectadas de esa planta. La cantidad promedio de zumbadores expresados en kilos SIN DECIMALES Y SIN REDONDEAR, producidos por año
EJEMPLOS 5 3 2 5 1 4 3 2 5 1 4 2466 7 15 8 25 20 35 14 45 8 55 2 65 2 75 1 32454
4: C-mbrando (cembrando.cpp ó cmbrando.c) POR: JOSE LUIS ROA GARCIA DE LA PAZ El Dr. Karel como ha decidido estudiar el comportamiento de una colonia de bacterias en un cultivo, que se puede considerar como una superficie cuadriculada de N filas y N columnas; cada casilla de esta superficie puede estar vacía o puede contener una bacteria. A partir de cualquier configuración inicial, la colonia evoluciona generación a generación según unas leyes genéticas fijas y determinadas y que dependen del número de vecinos que tenga cada casilla. Para todas y cada una de las generaciones las leyes genéticas son: Nacimiento: en toda casilla vacía que tenga exactamente tres vecinos. Muerte por aislamiento: toda bacteria que ocupe una casilla con uno o ningún vecino. Muerte por asfixia: toda bacteria que ocupe una casilla con más de tres vecinos. Supervivencia: toda bacteria que ocupe una casilla con dos o tres vecinos. La casilla que ocupa la fila i y la columna j se identifica mediante (i, j) (1<=i<=N, 1<=j<=N). Los vecinos de una casilla (i, j) son las posiciones (i-1, j-1), (i-1, j), (i-1, j+1), (i, j-1), (i, j+1), (i+1, j-1), (i+1, j) e (i+1, j+1) que estén comprendidas dentro de la superficie y que estén ocupadas por una bacteria. Así, en una superficie 4x4, la colonia de la izquierda de la figura siguiente evoluciona en las dos próximas generaciones tal y como se muestra:.. *.. * *.. *. *. * *.. * * *...... *... * *. *. *.. *.........
Ayuda al Dr. Karel a simular la evolución de una colonia inicial durante un cierto número de transiciones. Línea 1: valor de N (uno o dos caracteres que representen un número entero entre 1 y 20) Línea 2: número de transiciones a estudiar (varios caracteres que representen un número entero no negativo menor a 30 Línea 3: Numero B (1<=B<=(N*N)) de bacterias iniciales Líneas 4 hasta B+4: cada línea contiene una pareja de uno o dos caracteres, para representar la posición que ocupa una bacteria en la configuración inicial de la colonia. Los dos elementos de la pareja estarán separados por un único blanco. Cada elemento de la pareja representa pues un número comprendido entre 1 y N. La colonia resultante de aplicar las reglas descritas en el enunciado. Representamos la colonia con N líneas de N caracteres. Cada carácter de esta superficie N x N será o bien un carácter 'o' (letra 'o') o bien un carácter 'x', según la casilla correspondiente esté vacía o bien ocupada por una bacteria, respectivamente. EJEMPLO 4 2 5 1 3 2 2 2 3 3 3 4 3 oxox oooo oxox oooo
5: LA RED (red.cpp ó red.c) POR: JUAN PABLO MARIN ROSAS En la empresa que trabaja Karel se cuenta con una cantidad de N computadoras distribuidas en una red de trabajo local. Cada una de estas N computadoras esta conectada por cable a otras computadoras lo que mantiene una red difícil de caerse. Debido a que actualmente se encuentran con una crisis económica su jefe ha decidido que cambies la forma en la que la red se encuentra, Karel debe de retirar una cantidad de cables para poder venderlos y así obtener mas dinero para la empresa, por lo que le han pedido que al acomodar la red todas las computadoras estén conectadas y la cantidad de cable que se reúna para vender sea lo mayor posible. Como es un trabajo difícil Karel te ha pedido hacer un programa que te ayude a elegir que cables de red dejar conectados de modo que cada la cantidad de cable que se venda sea lo mas grande posible y no haya ninguna computadora sin conectar. En la primera línea dos números N y M, N es la cantidad de computadoras que hay en la oficina y M la cantidad de cables que están actualmente conectando a las computadoras. Las siguientes M líneas contendrán tres enteros A,B,C que son las dos computadoras A,B que ese cable une y el largo C que el cable tiene. 2<=N<=1000 1<=M<=100000 Además puedes asumir que la configuración de la entrada siempre están conectadas todas las computadoras.
De salida deberás imprimir un único numero entero que es la longitud de cable que se venderá. EJEMPLO 6 10 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 2 3 2 2 4 3 3 5 6 5 6 9 4 5 5 25 Explicación ejemplo: En la entrada una vez elegida la forma de dejar las computadoras para maximizar la longitud de cable elegirás vender los cables que unen a las computadoras (2,3),(2,4),(3,5),(5,6),(4,5) con un total de 25 de longitud con el resto de cables puedes mantener todas las computadoras conectadas.
UNICO: ser o no ser (ser.cpp) por: M. Fernando Guzmán M. Omijal ha detectado un problema de fondo en los participantes de la Olimpiada, su cambio de Karel a C no ha sido tan agradable como se quisiera, por ellos se les dá una oportunidad para que ellos mismo identifiquen su ser o no ser, que definirá si su futuro estar en la Programación o bien giran a la derecha a una carrera alterna. Ayuda al Bekerman a encontrar cuales valores dados son pares y cuales nones, utilizando para ello un programa escrito en C/C++. Solicita al usuario el total de números a evaluar que pueden ir desde 1 hasta 100 (1<=N<=100) Solicita al usuario los números ( 1<=N<=999 ) y define cuantos de estos son nones y cuantos son pares. Indica en la primer línea la cantidad de Números pares y en la segunda la cantidad de numeroso nones EJEMPLOS 5 8 21 318 678 75 3 2 NOTA: Conoce como obtener el residuo de la División Modulus y te será muy fácil lograr el reto.