Competitive programming is mainly about problem-solving skills. Students are given a problem and they have to write a short program to solve it. The students are given a problem for which they have to solve within the stipulated time. Efficiency or maintainability or portability of the code is not graded; however, the is a fixed amount of time given for each program to run.
Here is an example problem: https://www.codechef.com/LTIME49/problems/SHDWCMP
This kind of programming does not require a thorough knowledge of the language (for example, in C++, you'd never need to use classes or templates or anything as such) but it requires the student to be able to find ways to convert a word problem into a coding problem.
How do you go about training a student for competitive programming?
Teaching the language is not very hard but how do you improve someone's problem-solving ability?