Solucionario TAP 2020 (por Agustín Santiago Gutiérrez)

Ayer se realizó otra exitosa instancia del Torneo Argentino de Programación. Debido a la pandemia la competencia fue virtual lo que sin duda representa un cambio de paradigma para los equipos ya que a pesar de estar físicamente separados podían usar tres computadoras y disponían acceso al scoreboard de todas las regiones. La sede de Rosario tuvo 11 equipos, de los cuales cuatro fueron clasificados a la siguiente instancia a realizarse probablemente en marzo. La foto es el podio de nuestra sede durante una pequeña revelación virtual post-contest. Gracias Brian Morris por la organización y felicitaciones a todos los equipos por dejar nuestra sede bien en alto!

Enunciados

Siguiendo el siguiente link: https://drive.google.com/file/d/1zoiepxGBT1QSGHYv8RBrFQyxG-vk-SGl/view

Solucionario

Este año el solucionario lo tenemos gracias al canal de nuestro amigo bonaerense Agustín Santiago Gutiérrez.

No se olviden seguirlo y activar las notificaciones porque está haciendo contenido muy copado si les interesa entrenar en ICPC!



Scoreboards finales

Disponibles temporalmente por aquí: https://placar.naquadah.com.br/boca/Argentina/

Sede Rosario


Toda Argentina

5 horas en la World Finals 2016

Me dieron muchas ganas de escribir cosas que fuimos pensando, analizando y descubriendo en nuestros dos años como competidores a lo cuál, personalmente, le dediqué mucho tiempo. Todas estas cosas que voy a intentar volcar acá son producto de miles de errores, choques contra una pared y consejos de otras personas (entre las cuáles debo mencionar si o si al genio de Nico Alvarez), pero sobre todo producto de mi fascinación por poder lograr que el Caloventor funcione lo mejor posible.

En este posteo, voy a intentar relatar la World Finals 2016 desde adentro, sobre todo desde mi punto de vista. Creo que es una competencia ejemplificadora ya que nos preparamos mucho para ella y tuvimos casi todos los errores que podíamos llegar a tener. Voy a intentar ser lo más detallista posible, porque nunca encontré una guía detallada que nos ayude, pero seguro me voy a comer varios detalle.

Foto en el Warm Up
En esta competencia, nosotros íbamos a buscar el premio de campeón latinoaméricano, el cuál nosotros creíamos estar disputando (como finalmente pasó) contra las universidades de Pernambuco y Campina Grande. Las decisiones que fuimos tomando fueron en base a ese objetivo, aunque en algún momento pensamos que podíamos llegar a pelear alguna que otra medalla.

00:00
Arranca la competencia. Cada uno tiene su rol inicial bien definido y pensado. Esto es importante, porque al principio los nervios y la ansiedad te comen vivo y cuesta pensar si no estás organizado. Los tres sabíamos en que condiciones estába cada uno, yo en particular no había dormido un carajo y estaba con algo de fiebre pero estaba muy motivado, el Marian estaba hiper-nervioso, y Martín... Martín nunca sabe como está, ja. Pero ambos habían dormido bien que no es poco. Los 3 con muchas pilas ya que nos habíamos motivado 15 minutos antes de que nos íbamos a comer vivo a los Brasileros, je. Esas cosas que uno sueña y la mayoría de veces no pasa.

Nuestra tablita final luego de las 5 horas
Martín arrancó codeando el template, que es un archivo base que copiamos solo una vez al principio para no hacer 10 veces lo mismo (y que sobre todo sirve para menguar los nervios), y a ordenar todas las cosas necesarias en la compu, yo me puse a copiar la tablita (ver imagen) y Mariano a leer desde el A.

Yo soy el que busca el trivial y leo E+. Pegué una ojeada, descarte F,G,H,I y me puse a leer primero el J y como parecía hard volví al E.

Llega el primer solve del C, y lo mandamos a Mariano a pensarlo. En eso Martín me cuenta el L diciendo que parecía de mi onda, lo pienso y me pareció idéntico a un problema que ya había pensado, por lo que me puse a codear algo "esperando a ver si entraba". Mando y metó un TLE completamente ilógico. Releó el código y veo que había cerrado mal una llave, que pajero. Lo arreglo, mando y metemos el L!

Brasil festejando nuestro RTE
Marian tenía el C y entra a codearlo, Tin estaba leyendo el K y yo me pongo a pensar el E. Me pareció que era para el Marian, vuelvo a pensar el J pero no llego a nada, anotó que es Hard y lo dejo. A todo esto el Marian producto de sus nervios iniciales mando un RTE por hacer algo con complejidad exponencial, con la presión de que la gente lo metía.


Resumen (a la 0:30) - (45avos - 5tos LATAM)
A: Math-Bardo.
B: No leído.
C: Codeando/Debugueando (Marian) (40 AC)
D: No leído.
E: Math-a la espera de Marian (3 AC)
F: No leido
G: No leído
H: No leído
I: No leído
J: Pensando (Pablo).
K: Pensando (Tin).
L: AC
M: La idea está pero hay que codearlo y es una paja (Tin)

Por suerte se ordenó, y sumado a que nadie lo molestaba porque no se nos ocurría una puta idea, metió el AC con lo que subimos momentaneamente a la zona de medallas. So, entra el C. Yo me había puesto a leer el D, y Tin el K. Le cuento al Marian el E, y se me ocurre la idea del D. Como la máquina estaba vacía me la iba a poner a codear, pero yo no soy el coder así que le pregunto a Tin si estaba con alguna idea o le contaba el D. Estaba bloqueado con el K, por lo que le cuento la solución del D por arriba pero le digo que se lo ponga a ver él porque no lo había leído completo. A todo esto el Marian me cuenta su idea del E pero era una fruta que en el podía tardar 10^18. Nos lo ponemos a pensar juntos (que es algo que no solemos hacer antes de la primer hora mucho pero dado la presión inicial valió la pena) y se me ocurre una idea pero que había que codear algo del diego que podía llegar a tardar como 20 minutos. El Marian me da el visto bueno y cómo la máquina estaba desocupada, Marian me deja el E y se pone a pensar el G que lo venían metiendo. Yo me pongo a copiar lo que teníamos en el diego (ese nombre le ponemos a los algoritmos que llevamos impresos en papel) hasta que termino y Tin estaba pseudocodeando el D.

Resumen (a la 1:00) - (27avos - LATAM Champions)
A: No leído bien, parece para Pablo.
B: No leído. (1 AC)
C: AC
D: Pseudocodeando (Tin)
E: Codeando el Diego (Pablo) (18 AC)
F: No leido
G: Pensando (Marian) (5 AC)
H: No leído
I: No leído
J: Dejado, Med/Hard.
K: Leído. (2 AC)
L: AC
M: La idea está pero hay que codearlo y es una paja (Tin)

Cuando termino de codear, Tin se pone a codear el D, mientras yo imprimo lo del diego y Marian entra a revisarme el código (cosa clave que otro revise lo del diego, en este caso me arreglo mínimo como 5 errores de tipeo) y yo a pseudocodear la otra parte del E. A todo esto Marian tenía la idea del G, me la cuenta diciendome que es algo que nunca habíamos codeado. Yo le dije que no había apuro porque teníamos dos problemas , y como la máquina de repente estaba a full se pone a pseudocodear la idea en papel. Muchas veces es más rápido escribir en papel que frente a una computadora y es algo que no muchos equipos hacen.  

Estar frente a la compu te pone presión de que tenés que hacer cosas útiles porque la estás ocupando. Nuestro método de laburo era generalmente cooperativo: Siempre que se podía se pseudocodeaba los detalles finos en papel, la máquina solo se usa para codear y si alguien quiere debuguear lo hace en papel salvo que nadie más necesite codear. Meter los problemas rápido siempre fue sólo de prioridad baja. Nuestra regla número 1 siempre fue no dejar la máquina sin uso.

Por mi parte, yo me pongo a codear lo que queda del E, intermitentemente con Tin que iba codeando partes del D (que era de implementación) entonces codeaba un rato cada uno mientras el otro revisaba su código y pseudocodeaba nuevas partes. Esto estuvo bueno porque yo estaba ansioso y desordenado y no podía codear bien mis ideas del E. Las salidas esporádicas me ayudaban a repensar que tenía que ir haciendo. Mariano termina de pseudocodear el G, y como la máquina estaba a full se pone a pensar el K que era el próximo por subs.

Resumen (a la 1:30) - (39avos - LATAM Champions)
A: No leído bien, parece para Pablo. (2 AC)
B: No leído. (4 AC)
C: AC
D: Codeando/Debugueando (Tin) (1 AC)
E: Codeando/Debugueando (Pablo) (45 AC) 
F: No leido
G: Pseudocodeado (Marian) (15 AC)
H: No leído
I: No leído
J: Dejado, Med/Hard.
K: Pensando (Marian). (7 AC)
L: AC
M: La idea está pero hay que codearlo y es una paja (Tin)


Este momento fue clave en la competencia, porque estábamos con 3 ideas y una sola computadora, Martín estaba luchando con el D y yo con el E hacía ya un tiempito. Mi programa ya estaba todo codeado pero yo estaba trabado sinceramente porque no entendía que estaba haciendo (el problema E tenía sus vueltitas en el medio de los nervios de la competencia) entonces salí y lo deje a Martín mientras volvía a repensar todo. Ordené mis ideas, y cuando Martín salió a pensar, cambié una línea y de repente todo dio. Lo mande con mucho miedo ya que había muchos WAs y no confiaba en mi overkill pero dio AC! Gol de media cancha y entró el Marian porque Martín estaba viendo porque no le daban los ejemplos. Mientras tanto yo me puse a leer el A que Marian dijo que parecía Matemático y Martín encuentra un errorcito en el D pero no entra a codear porque el Marian estaba en la compu y se pone a leer el K que era el próximo.

Resumen (a las 2:00) - (39avos - LATAM Champions)
A: Leyendo/Entendiendo (Pablo) (4 AC)
B: No leído. (9 AC)
C: AC
D: A la espera (Tin) (3 AC)
E: AC
F: No leido
G: Codeando (Marian) (26 AC)
H: No leído
I: No leído
J: Dejado, Med/Hard.
K: Pensando (Tin) (16 AC)
L: AC
M: La idea está pero hay que codearlo y es una paja (Tin)

Mientras Mariano codeaba el G, a mi se me ocurre una idea del A pero que necesitaba una mano de los pibes, por lo que me pongo a pseudocodear mi parte (en papel). Mientras analizo el código, me doy cuenta que ni siquiera necesito ayuda de los pibes, porque el problema parecía trivial. A todo esto seguíamos punteros y con 3 ideas así que veníamos bárbaro. Marian se traba con el G y entra el Tin que en 5 minutos arregla el D, manda y otro AC! Festeja Calove y entro yo a pseudocodear mi parte del A alternadamente con el Marian. Martín vuelve a pensar el fatídico K.

Resumen (a las 2:30) - (34avos - LATAM Champions)
A: Codeando (Pablo) (6 AC)
B: No leído. (15 AC)
C: AC
D: AC
E: AC
F: No leido
G: Codeando (Marian) (44 AC)
H: No leído
I: No leído
J: Dejado, Med/Hard.
K: Pensando (Tin). (28 AC)
L: AC
M: La idea está pero hay que codearlo y es una paja (Tin)

Yo termino de codear el A, lo mando y me como un WA completamente desmotivante. Mientras Mariano seguía viendo el G, me llega la impresión (Regla de Oro: Cada vez que se manda un problema se imprime y recién se ve el resultado cuando llega la impresión), releo el enunciado y descubro un detallecito, por lo que vuelvo a entrar, cambio una constante, mando y llega el AC! Alto grito metí acá. Marian también termina de codear y manda y otro AC! Miro a Latinoamérica: Pernambuco y Campina Grande estaban con 4 y después todos 3 para abajo y nosotros teníamos 6. Estábamos 14avos y podíamos llegar a pelear medalla! Estuvimos 2 minutos congelados en un estado de shock hasta que finalmente nos sentamos a analizar.
Caloventor mete el G y queda arriba

El K no salía, me lo cuentan y no era mi onda. Martín se pone a leer el B que era el otro que alguien había metido y el resto de los problemas no tenían ningún AC. El B no lo entendíamos, Marian sigue pensando el K, Martín se lee el I y lo anota como EL HARD y yo el H. Acá la máquina no estaba siendo usada. Terminamos de entender el B y se me ocurre la parte trivial y lo mando a codear a Martín. Esta creo fue una decisión erronea, tendríamos que haber codeado el M que ya lo teníamos pensado y sabíamos como salía. Creo que nos asustó que nadie lo haya metido y me parece que nos apuramos por tener la máquina ocupada en lugar de analizar mejor. Ahí le cuento el problema B al Marian, me dijo que conocía el problema pero que no sabía como se resolvía, malísima noticia. Se nos ocurren una ideas para optimizar y lo dejo porque el me dijo que ya tenía una idea.

Resumen (a las 3:00) - (18avos - LATAM Champions)
A: AC
B: Codeando (Tin), Pensando (Marian). (24 AC)
C: AC
D: AC
E: AC
F: No leido
G: AC
H: Leyendo (Pablo)
I: Dejado, HARD.
J: Dejado, Med/Hard.
K: Leyendo/Pensando (Pablo). (38 AC)
L: AC
M: La idea está pero hay que codearlo y es una paja (Tin).

Mientras los pibes estaban con el B, yo me pongo a ver un panorama general de la prueba, ya que el B y el K no nos estaban saliendo y nadie había metido nada más. Leo el H y se me ocurren unas ideas que le cuento a Tin y definimos dejarlas por ser Geométrico y re bardero. Vuelvo y me pongo a pensar el K desganado (no es el tipo de problema que yo suelo hacer). Pruebo un par de casos y se me ocurre una idea loca y extraña! Los pibes estaban laburando en el B y le cuento mi idea a Tin que no me entiende nada (producto de mi quemadez, estuvimos como 1 o 2 minutos), entonces me enojo y me pongo a codearla yo. Los pibes mientras tanto buscaban como arreglar la segunda parte del B, que tenía que salir porque lo metían toooodos (error). Llega el primer AC del F, pero ya es tarde... No tenía sentido leer ese problema.

Resumen (a las 3:30) - (22avos - LATAM Champions)
A: AC
B: Pensando como codear una parte (Tin y Marian). (28 AC)
C: AC
D: AC
E: AC
F: No leido, dejado. (1 AC)
G: AC
H: Dejado por Geometría HARD
I: Dejado, HARD.
J: Dejado, Med/Hard.
K: Codeando (Pablo). (46 AC)
L: AC
M: La idea está pero hay que codearlo y es una paja (Tin).

Faltando una hora y media, y sin muchas ideas concretas, redujimos la prueba a B,K,M, lo cuál es bueno porque no tiene sentido pensar tantos problemas al final (3 sería lo máximo en hora y media). Mi análisis de la situación es que había que meter 8 para ser Latam porque teníamos buena penalidad y 9 para la medalla, entonces estaba apurado para meter B y K.

Acá yo me pongo a codear la parte borde del K y le pido ayuda al Marian para codear la parte de la simulación trivial. Le cuento mi solución así no más y lo que él tenía que hacer que parecía una boludés pero yo no podía hacer ni un for. Marian se lo pone a hacer. Mientras tanto mandamos las primera subs del B que nos dan WA (que estábamos seguros que era error en la idea del Marian). Desgraciadamente había un error en el Dijkstra pero no se porque no nos dimos cuenta y nadie releyó el código. Yo estaba casi seguro que la idea del Marian estaba bien pero no dije nada porque estaba con el K, desgraciadamente también estaba mal. Cuestión, priorizamos meter el K.

Resumen (a las 4:00) - (28avos - LATAM Champions)
A: AC
B: WA (-2) Debugueando (Tin). (39 AC)
C: AC
D: AC
E: AC
F: No leido, dejado. (2 AC)
G: AC
H: Dejado por Geometría HARD
I: Dejado, HARD.
J: Dejado, Med/Hard. (1 AC)
K: Codeando (Marian y Pablo). (55 AC)
L: AC
M: La idea está pero hay que codearlo y es una paja (Tin). (1 AC)

El equipo en los últimos momentos
Mandamos por primera el K y WA. Marian se pone a recodear su parte mientras Martín se pone a intentar arreglar el B. Acá pasamos un tiempito debugueando ambos códigos. Yo pruebo un par de casos en el K y dan mal. Mandamos el K con la nueva parte del Marian y otro WA. Vuelvo a probar los mismos casos. Daban mal, y estábamos tan en cualquiera que ni habíamos probado los casos. Mientras tanto Martín entraba a ver cosas del B.

A las 4:30, luego de casi 2 horas sin meter ningún AC, charlamos 10 segundos y metemos una buena decisión y dejamos el B bajando nuestras espectativas (nunca repensadas) de 9 y medalla que teníamos hace 2 horas y apuntando a, al menos, meter 7. Yo encuentro un error en mi parte, puteo, la arreglo y con el nuevo código del Marian daba cualquier cosa. Pruebo con el viejo y da bien. Mando y WA!!! Marian me putea y dice que usemos su nueva parte, nos ponemos a debuguear y era una boludés, arreglamos, mandamos y AC!!!!
Otro grito de gol pero que no se grita para que nadie de latinoamérica sepa que metimos el 7mo y especule. Quedaban 16 minutos donde teníamos que meter el B para asegurar el Latam Champions. Nunca nos pusimos a ver el dijkstra del B. Nos pusimos a codear una idea fruta y mandamos 13 submissions probando cosas. Todas WA en la parte trivial del Dijkstra, ja.


Terminamos con 7 problema sobre 13, 32avos del mundo y Campeones Latinoamericanos (42avos quedo también con 7 el equipo de Pernambuco que si no metíamos el K nos hubiese ganado y Campina Grande quedó con 6).

http://myicpc.icpcnews.com/World-Finals-2016/scoreboard

Caloventor recibiendo el Latam Champions

Solucionario TAP 2017

Una vez más otra exitosa instancia de esta competencia realizada alrededor de toda Argentina fue llevada a cabo. En esta ocasión Pablo Zimmermann colaboró junto con muchas otras personas en la elaboración de los problemas y a su vez fue coordinador de la sede de Rosario, la cual fue técnicamente posible gracias a Martín Villagra. Como siempre dejamos una foto de nuestra sede (en la que no nos acompañó Mariano por no estar en Rosario) y soluciones a los problemas.



Links útiles



Solucionario

A



B



C



D



E



F



G



H



I



J



K



L



[VIVO] - Latam Scoreboard World Final ICPC 2017

Sigue los equipos latinoaméricanos filtrados: http://bit.ly/2rhxAI6


Solucionario Regional Latinoamérica 2016

Pese a algunos percances con el problema E, podemos decir que la prueba fue entretenida y satisfactoria. Solamente un equipo logró resolver todos los problemas (nuestras felicitaciones al equipo de Cuba). Mariano y yo (Martín) colaboramos en la sede de Buenos Aires durante la competencia, mientras que Pablo tomó el rol de coach de los equipos de nuestra universidad (Universidad Nacional de Rosario).

Caloventor, junto a los equipos de la UNR que participaron en el Regional


Links Útiles



Soluciones

Aquí les dejamos el solucionario, el cual es una traducción mas o menos fiel del realizado por FFAO (Fernando Fonseca) en su blog: https://algorithmmarch.wordpress.com/2016/11/15/final-brasileira-da-maratona-2016/. Incluimos una solución detallada del problema E que aunque no fue parte de la prueba oficial, nos parece un problema muy interesante.

A



B



C



D



E



F



G



H



I



J



K



Solucionario TAP 2016

Aquí un solucionario respectivo al contest del Torneo Argentino de Programación (TAP) 2016. El solucionario NO es oficial. (Los enunciados pueden encontrarlos aquí). Los resultados finales de todo el país se encuentran aquí. Este año tuvimos la oportunidad de organizar el TAP en nuestra sede.

Éste es el orden de dificultad (creciente) de los problemas que pensé aún antes del TAP (fui problemsetter!):


Pienso que en general ha sido una muy bella prueba con problemas muy divertidos y creo que podría hablar por todos los problemsetters si digo que todo salió bastante bien.

Los equipos compitiendo en la sede de Rosario

A continuación el solucionario, que hicimos junto a Martín.

Problema A



Problema B



Problema C



Problema D



Problema E



Problema F



Problema G



Problema H



Problema I



Problema J



Problema K



Problema L

Introducción de cero a la programación competitiva

Escribo esta entrada porque varios me han pedido consejo de por dónde empezar a introducirse a la programación competitiva.


Voy a suponer que tienen conocimientos de programación básicos. Quizás más adelante agregue alguna referencia de dónde pueden aprender a programar pero creo que hay muchísimo más material de esto que de programación competitiva en sí.

Recomiendo seguir los siguientes tres puntos para empezar de 0. No están hechos para hacerse en orden sino a la par. Esto puede llevar tiempo, así que a no desmotivarse. Más abajo listo material útil. Y por último doy algunos tips que se me fueron ocurriendo a medida que escribía esto.

Introduciéndose:

        1. Si nunca submiteaste un problema, create una cuenta en USACO (ver link del compilado) y ver la primer seccion para ver como es la dinámica, el formato que tenés que respetar, de como submitear una solución en un juez online.

        2. Ver el libro de Steven Halim. La sección introductoria y de problemas ad hoc es un buen punto de partida. Otro portal por el que se puede empezar es URI que tiene problemas ordenados por dificultad y podemos elegir los más fáciles.

        3. Crearse una cuenta en Codeforces. Podés empezar haciendo problemas A de Div2 (los más fáciles y tratar de hacerlos). Si tu respuesta es incorrecta te permite ver por qué y cómo debería ser la respuesta correcta del programa.

        4. Seguir el libro Halim en secciones posteriores (como Greedy, Programación Dinámica, Grafos) para incorporar conocimientos teóricos nuevos que nos van a permitir resolver un espectro más amplio de problemas. Siempre es importante no quedarnos con los problemas fáciles que se nos ocurren rápidamente ni tratar sólo los tan difíciles que debamos ver siempre la solución, sino ir ampliando de a poco nuestro horizonte y dejar un tiempo razonable el problema en el tintero. Ojo, que también es importante que si no salió el problema, buscar la solución tratar de implementarla por uno mismo y entender por qué no me salió (tal vez algo teórico que no sabía y deba aprender, o quizás alguna manera de enfocarlo distinto), incorporar este nuevo conocimiento y pensar cómo podría ayudarme a resolver otros problemas distintos.

Material útil:

USACO: http://train.usaco.org/usacogate
Es una página de entrenamiento para competencias (IOI) de secundario de los norteamericanos.
Muy amena introducción. Recomendable para hacer la primer sección como introducción a la dinámica de la progrmación competitiva.
Recomiendo seguir la guía si estás entrenando para el secundario pero sino no sugiero hacerlo, creo que hay lugares mejores orientados a la ICPC.
Es motivante el hecho de que necesitás hacer los problemas de una sección para pasar a la siguiente pero a veces traba un poco, en estos casos recomiendo buscar alguna solución en internet y submitearla.

Codeforces: http://codeforces.com/
Es una comunidad muy piola que organiza competencias online periódicamente. También hay algunas guías de temas teóricos desde básicos hasta muy avanzados.
Súper recomiendo crearse una cuenta acá y empezar a ver problemas. Los problemas están clasificados en dos divisiones (Div2, fáciles y Div1 avanzados). Además en las competencias suelen estar ordenados por dificultad creciente.
La página tiene una sección llamada Gym, muy útil para practicar con tu equipo competencias oficiales anteriores ya que simula el scoreboard como si estuvieras compitiendo con las personas que participaron antes.

Training Camp Argentina: https://sites.google.com/site/trainingcampargentina2016/
De los training camps argentinos da para hablar mucho, pero en resúmen es un evento HIPER recomendable (diría que hasta escencial!) para participar. Organizado por gente muy buena onda y copada, con mucho trabajo solidario aporta para que este tema de las competencias se extienda en todo el país.
Siempre decimos que sin ayuda de estos eventos nunca hubiéramos clasificado a nuestra primer mundial. Se hacen en junio generalmente y consiste en un curso donde todos los días tener clases teóricas a la mañana y simulacro de competencia por las tardes. Es muy intensivo pero re vale la pena hacerlo!!
Acá puse la página de la edición 2016 pero si googlean por año, aparecen todos lo anteriores. Tiene slides de teoría que se dio y links a las competencias que se simularon.

Live Archive https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8
Uno de los tantos jueces en línea. Acá tenemos, por ejemplo, los regionales de años anteriores. Aunque particularmente no recomiendo quemarse problemas de estos así pueden simularlos después con sus equipos.

UVa Online Judge: https://uva.onlinejudge.org/
Otro juez en línea. El libro de Halim tiene referencias a problemas que se encuentran acá.

Competitive Programing (Libro de Halim)
https://sites.google.com/site/stevenhalim/
Este libro lo compramos nosotros. No se comercializa acá y hay que esperar algunos meses a que llegue acá en Argentina, pueden intentar buscar alguna versión por Internet.
Yo creo que está bueno para empezar, de hecho nosotros empezamos por acá y le debemos mucho mucho a Steven Halim. Tuvimos la oportunidad de agradecerle personalmente y sacarnos una foto con él! (siempre asiste como invitado a las finales)
Está bueno que presenta un panorama general de las categorías de problemas existentes y cada sección tiene un desarrollo que llegua a conceptos avanzados, dando código de ejemplo y referencias a problemas de jueces online.
También existe el libro Programming Challenges de Steven Skiena, que tiene un approach un poco menos centrado a las competencias pero más claro en cuánto a las introducciones a los temas.

URI online Judge (https://www.urionlinejudge.com.br/judge/en/login)
Es un juez brasilero. Cada vez más está incorporando y traduciendo problemas al español. Una de las ventajas de URI frente a otros portales es que tiene los problemas clasificados por dificultad.
Ésto esta muy bueno, entre muchas varias otras cosas porque cuando uno empieza no tiene la capacidad de discernir cuando un problema es complicado y no está a su alcance ó cuando simplemente le tiene que dedicar más tiempo. Y está bueno empezar con problemas fáciles, especialmente si uno aprendió a programar hace poco es probable que tenga muchos errores las primeras veces.

e-maxx.ru: http://e-maxx.ru/algo/
Es una página con muchísimo material avanzado en ruso. Los rusos son la vanguardia en esto así que es común ver material en ruso. Yo siempre usé Google para traducir pero quizás Yandex sea mejor.


Tips:
  • Qué es un Juez en Línea? Es un sitio donde hay problemas y puedes submitear código para que checkee si resuelve el problema.

    Es muy importante que a la hora de hacer problemas no sólo los pienses, sino programes y submitees. Es muy común al principio tener errores en los que nuestro programa anda bien en CASI todos los casos pero hay alguno que falla porque no lo contemplamos. De hecho no cometer errores implementando el problema, aún teniendo una idea correcta es una gran parte de la competencia. Por eso creo que es escencial que para mejorar hagan problemas que ESTEN SEGUROS que van a poder submitear el código en algún juez y verificar que sea correcto.
  • Los jueces corrigen MUY ESTRICTAMENTE como van a ver si hacen la primera sección del USACO. Son máquinas, así que una mayúscula en vez de minúscula, un espacio o un salto de línea de más hará que nuestra solución este MAL.
  •   Programar en C++: siempre escoger el lenguaje, dentro de los que permiten las competencias, es una cuestión de gustos. Pueden elegir Java si prefieren. Yo recomeidno C++ por varias razones:
    1. Creo que hay más material en C++ que en Java.
    2. Python creo que fue introducido para incentivar la participación ya que se está enseñando mucho en primeros años. En la ICPC se lo está comenzando a adoptar pero aún tiene varios problemas que genera que NO todos los problemas puedan ser resueltos en python. Esto se debe a que usa los tiempos límite de ejecucción de Java y no tiene tiempos límite propios, puede que muchas veces Python sea más lento y un programa que resuelve satisfactoriamente y en la complejidad requerida el problema y aún así el veredicto sea Time Limit Exceeded .
    3. Por sobre C, C++ tiene la STL con muchas estructuras ya hechas que aporta mucha ventaja (set, map, priority_queue, etc).
  • Considerar ir al training camp es una excelente idea. Si sos alumno de la FCEIA, año a año se ha tratado que los gastos de traslado sean cubiertos con apoyo del departamento de Computación. A veces el evento cuenta con sponsors que cubren gastos de alojamiento.  El respeto y relevancia que la ICPC inspira así como los resultados que hemos logrados han hecho tomar conciencia a los profesores de REPROGRAMAR fechas de examenes. No sólo en Computación sino desde la Escuela de Ciencias Exactas hay una voluntad de hacer prosperar esto. Así que si de algún modo es impedimento para su participación algún compromiso académico, esto se puede llegar a ver y tratar razonablemente.
  •  Rodeate de gente con la que puedas compartir y apoyarte. La idea que surgan talleres, entrenadores y materias optativas sobre Programación Competitiva es para satisfacer la necesidad de estos espacios. En nuestro inicio tuvimos la suerte de formar el equipo y apoyarnos entre nosotros fue muy importante para seguir avanzando.