Bienvenidos al mundo del "
Competitive Programming".
Les comparto un poco de mi experiencia:
http://teddy.itc.mx/index.php (Limitado a C y C++)
http://www.checkio.org/ (Solamente python)
http://projecteuler.net/ (No hay limite de tiempo o lenguaje).
http://uva.onlinejudge.org/ (Lenguajes soportados, Pascal, C, C++ y Java).
http://www.spoj.com/ (Abierto a cualquier lenguaje, pero dependiendo del problema esto puede cambiar).
http://www.codechef.com/ (Esta abierto a cualquier lenguaje, pero eso puede cambiar dependiendo del problema).
https://code.google.com/codejam (CodeJam es un concurso que hace google todos los años, y uno de sus propositos es reclutar o identificar a programadores con talento, pueden usar cualquier lenguaje).
http://www.topcoder.com/ (Programación competitiva a largo plazo, cualquier lenguaje es aceptado, pero hay restricciones en ciertos proyectos).
http://sql-ex.ru/ (Esta paginas es mas para entrenamiento de SQL)
Algunas sugerencias:
1. Leer de algoritmos
2. Practicar
3. No quedarse en un solo problema, si no lo pueden resolver, guarden el problema, resuelvan otros problemas, vuelvan mas tarde y tal vez ahora sera mas facil, si no repitan el ciclo.
4. Practicar
5. Buscar mas fuentes, donde aprender (Blogs, libros, revistas, web, foros, irc, etc...)
6. Practicar
7. Crear su propias librerías para tareas comunes.
8. Practicar
9. Volver al punto 1