¿Qué debo hacer para comenzar a participar en los concursos de programación, aprender un lenguaje de programación (como C ++) y comenzar a resolver problemas o aprender un lenguaje, estudiar algoritmos (como en CLRS) y luego comenzar a resolver problemas?

Bueno, primero que todo aprender un lenguaje de programación. Puedes comenzar con C si no tienes idea acerca de la programación. Luego entenderemos los conceptos básicos del lenguaje C.
Entonces te sugiero que practiques en un sitio web de programación competitivo como Spoj. Y empieza a resolver preguntas. Recuerde ordenar las preguntas de fácil a difícil (en función del número de presentaciones).
Resuelve alrededor de 30-40 preguntas inicialmente en Spoj para que puedas sentir un poco la programación competitiva.
Ahora participe en Codechef por mucho tiempo y trate de resolver la primera pregunta, puede llevarle tiempo resolverla pero no se rinda. El concurso largo es de 10 días y tienes tiempo suficiente para probar preguntas y encontrar una solución. Te sugiero que pruebes las primeras 4 preguntas en codechef largo. Si no eres capaz de encontrar la solución, siempre puedes Mira el editorial del problema (disponible después del concurso).
Ahora puedes empezar a aprender algoritmos. Pero al mismo tiempo, no dejes de practicar preguntas o participar en concursos. Preferiría CLRS para algoritmos. Intente implementarlos, preferiría C ++ debido a su excelente STL (biblioteca de plantillas estándar). En programación competitiva, STL es una herramienta muy poderosa, intenta dominarla. Esta transición de C a C ++ no será un problema para usted.
¡Feliz codificación!

Para todo lo que pediste, hay una sola respuesta:
HackerEarth – Desafíos de programación y trabajos de desarrollador

¡Y también puede solicitar trabajo allí mismo!

Aquí hay un youtube que enseña lenguajes de programación (nivel principiante):

Computer Xaviour – Hacking Unleashed