Practice or Train ?

When it comes to competitive programming, the most important thing we need to have is patience. Of course, competitive programming requires a lot of hard work, consistency dedication. The term you used “practice smartly”, fits the best here. Well every competitive programmer sets short term goals and strategies to achieve them. Well here are some of the strategies that I follow and I think are smart enough to fit in your view:

  1. I choose one topic that I haven’t mastered yet. Find tutorials on that topic, mainly from the list given below:
    1. TechParoksha (not all kind of tuts are available, but the ones that are available, are awesome)
    2. Data Science Tutorials (Don’t go with the name)
    3. Algorithms – GeeksforGeeks
    4. Tracks and Practice Problems
  2. I study it (not necessarily master it at the first go). But I make sure to finish the most of it as soon as possible so that I could start it again as fresh. And believe me this makes the most out of it at the second attempt.
  3. Once I think I know this topic well enough, I immediately go to A2 Online Judge and find problems based on that particular topic. I prefer Sphere Online Judge (SPOJ)as my favorite online judge. But I would prefer to choose Codeforcesif I were to solve more number of problems instead of more difficult problems.
  4. Then I start solving problems in increasing level of difficulty. Since I choose Sphere Online Judge (SPOJ) most of the times, so I make sure not to give up, until the problem I chose is completely solved. Because I think problems here are the toughest and always make you more and more confident once you solve them.
  5. I don’t leave any live contest from any of the following websites:
    1. HackerRank
    2. Codeforces
    3. Programming Competition,Programming Contest,Online Computer Programming
    4. HackerEarth – Programming challenges and Developer jobs

Here are some other things that you might like:

  1. We, the competitive programmers, get bored easily. Make sure to go out and have some fresh air every once in a while, to get intense at it. You can use some other type of entertainment. My personal favorite is to solve an older codeforces round contest in virtual mode.
  2. Find a peer, that is equivalently passionate about competitive programming. Compete with him/her, that’s one of the best ways to manipulate laziness that you may feel sometimes.
  3. Set motivations(such goals). My latest motivation was to secure under 100 rank in hackerrank codesprint contest, so that I could get amazon gift card and a hackerrank t-shirt. But I couldn’t.

There is no other way for success, but practice to the hardcore level.

All the best! 🙂