"Where do I start?" "How do I get better?"
Stuck here?
Don't worry, here is a guide that will help you answer these questions .
"Where do I start?"
Step 0: Prerequisites: Determination / Dedication.
Step 1: Choosing your language. Which: The language should be preferably C++ or Java, the last preference should be Python (due to its unavailability on many official coding platforms, e.g., the ACM ICPC).
We will focus on C++, Java is slow, but more importantly lacks shorthand generic implementations of standard templates (one big advantage of Java is Big Integers, which we will see later)
Why: Java, C++, Python have libraries that would cut the time to write the code, as well as increase the efficiency most of the times. Example: sort(a,a+n); //in C++ would sort the array of n elements in O(nlogn) time. It is both simpler to implement and more efficient than the O(n^2) sorts.
If you know C, it is very easy to switch to C++. With almost no effort, you can use very powerful libraries.
Step 2: Learn the Language? I would recommend practicing problems, as many as you can, you'll be able to learn stuff as the need arises.
Step 3: Where? What if I'm stuck? Too much stuff all around and I'm freaking out. :O :( Google is a source that you would rely on most of the time. But if you didn’t understand something on google or you want to discuss a topic with someone or clear doubts, you are always free to ping someone Someone will definitely reply.
Step 4: Okay, I'm ready, tell me where to start. https://www.hackerrank.com/ https://www.hackerearth.com/practice/codemonk/
Doing till the "Sorting" part is recommended before you try an Online judge like Codeforces.
Then switch over to a better Online Competitive Platform http://mirror.codeforces.com/
It is a platform where regular contests are held and everyone has ratings.
Here is a link for all the problems, sorted by submission. Usually, greater the number of problem submissions, easier is the problem. http://mirror.codeforces.com/problemset?order=BY_SOLVED_DESC
Try finishing the first 3-4 pages of this^ to get a hang of competitive coding.
Start from square 1, build up your confidence, start from the most solved, and keep going. Generally, 'A' problems would be the easiest, followed by B, C, and D .
P.S. Remember, you're in Div2. Look for the Division, Div1 As are equivalent to Div2 C’s. you might end up doing a very difficult A problem :P
As a newbie, you should never care about rating because that is your biggest barrier in trying harder and trying problems out of your comfort zone during a competition. Even if your rating is going down, it doesn't mean you aren't improving; rating is relative to others and isn't a sole factor of what you can do.
The key is: "PRACTICE, PRACTICE, PRACTICE."
Don't stop even if you get stuck. Get help immediately. Do one or more of the following:
Try to find other people's solutions or read the editorial. Get the main idea of the solution. Now CLOSE the solution and implement yours without reading the solution again. This is quite important so that the algorithm/solution will sink into your head.
Participate in contests. There is no better practice than actual contests. Contests help with your ability to contain your stress and will test your strengths to the maximum. After each contest, make sure to solve all the questions that you did not solve during the contest. This is a key point.
Let me define “Stuck” for you. Stuck is a state when you have completely tried your level best, all ideas you have had have failed, and you can't think of more.
Your rating doesn't matter. Once you put your rating to a side, you'll be more aggressive in solving, :)
Rating would automatically improve as you improve.
Once you're comfortable with A and B level problems, try pushing for C, then push for D. Don't stop. Push harder, you'll definitely be good someday.
Add your friends/seniors and try to compete; try setting benchmarks and work hard. And most importantly:
Step 5: GLHF. Have fun. You really can't be good at something if you don't like it. So have fun! Good luck!