- Learn a programming language preferably Cpp.
- Then learn builtin libraries and inbuilt functions(learn STL if C++)
- Learn basic concepts like binary search, greedy algorithms and
recursion,sorting algos etc. - Learn Basic Number Theory.
- Start Problem solving at HackerRank.
- Once you feel comfortable at solving, start participating in contests going around.
- Websites -> Codeforces.Codechef,Atcoder .
- Practice from junior training sheet. Sheet
- Practice from codeforces problemset by sorting problems according
to rating and descending order of number of submissions. - As you reach a higher tier start learning advanced data structures like segment trees,trie etc.
- Learn Graph theory .
- There is a good playlist in youtube for graphs(CodeNCode)
- Also after participating in contest try to solve at least one question that you couldn't solve in contest(Upsolve)
- And keep practicing to improve speed and accuracy,Solve problems which are rated at least 100 above your current rating and don't waste time on easier problems and try to solve problems which you don't feel comfortable with.
- If you can't solve a problem for more than 30 min then just read the editorial (only practice in websites which provide good editorials.)and Then try to implement the code yourselves and if you encounter any new topic just google it and learn . Then practice problems on newly learnt topics
- Learn a basic programming language like c++ or python
- Learn the basic DS and algo like basic math, number theory, binary search, greedy algorithm, recursion and backtracking.
- These basic topics can be learned from the book “A guide to competitive programming” from Antti Laaksonen.
- If more detailed theory is required then the website cp algorithms can be referred.
- Basic problems from the learned topics can be done from the CSES problem set
- For further practice, problems from hackerRank can be solved
- Now we can start competing in contests from codeforces, codechef, atcoder, leetcode etc
- To build our logic we can solve the problems from the problemset in codechef or codeforces according to the rating.
- Advanced concepts like Segment tree, Binary indexed tree, Dynamic programming, Graph algorithms, Game theory, Geometric algorithms, Fast fourier transformation and heavy light decomposition should be learned after getting a grip on basic theory and problems.
- If our rating is getting stagnant then we can solve questions according to rating from A2OJ (preferably ones with rating 100 more than our present rating). Continue to participate in contests and if unable to solve particular problems just take hint from the editorial (do not go through the complete solutions) and try to solve them again if still solve it go through the solution and also practice some problems of similar logic.
- If we find any new topics then learn it from the various online sources.
- Just keep on practicing and continue to participate in contests as “PRACTICE MAKES A MAN PERFECT”.
- Never take it as a job and just enjoy the process.
- Practice more and more questions
- Upsolve the contest questions
- Know your level
- After learning new things-> practice few questions to increase confidence
- Keep your environment good to not get demotivated.
- Develop your own strategy
- Learn a programming language(C++ most popular for CP, has most resources online)
- Practice easy questions on websites like hackerrank
- Learn STL from GFG (you can use this website for reference)
- Start giving easy contests (eg : ABC , Codeforces Div 3)
- Always upsolve after the end of a contest (solve the problems you could not solve during the contest)
- Solve Atcoder Beginner Contest problems till ~D (this will help with problem solving speed also, kenkoooo.com has a list of all past atcoder problems)
- After solving , look at other people’s code and also the editorial , this can give you ideas that you may have missed or might teach you clever ways of implementing a solution.
- Solve problems of [+100,+300] more rating than your current rating, on Codeforces.
- Use Mostafa Saad’s Junior Training Sheet to solve problems based on topic or based on difficulty(It has around 950 problems to newcomers to CP)
- Learn few important Data Structures and Algorithms like DFS, BFS , Binary Indexed Tree, bitmasking , binomial coefficients ( A good resource for this is cp-algorithms.com , you can also refer to popular blogs on CF for particular topics)
- Learn DP ( You can use GFG, CF blogs , YouTube channels etc for this) (Solving Atcoder Educational DP Contest will help strengthen DP concepts)
- A few YouTube channels that might help with all the above steps are – Errichto, Demoralizer, Code N Code , Colin Galen , Second Thread , Algorithms Live
- You can also refer to Masataka Yoneda’s "A Way to Practice Competitive Programming", for an indepth roadmap
- Learn a programming language.
- Start practising in competitive programming websites (codeforces, codechef, atcoder)
- If you feel practising in these sites to be difficult in the beginning then do problem solving in hacker rank and then repeat step-2.
- Read editorials as there will be some techniques/ideas which many can’t think if they dont know them before, also reading editorials will groom you how to approach for a new problem.
- If you are stuck at certain rating do stuff which you weren’t doing before.
- Lastly never quit doing cp even if your rating falls for many contests in a row(atleast if you are interested to improve).
- Maintain a habit of googling whatever you don’t know and try to understand them.
-
Find some source of entertainment, something sustainable like gym, running, basket ball, table tennis, anime or some sport (8AM - 2 PM 6 hrs vs 8 AM to 10 AM CP then watch anime some then more CP then basket ball then some more CP)
-
When you are learning just accept it and try to analyze (1Day learn then start using template)
-
When you are solving just not accept it(editorial) and try to analyze
-
brain can burn up to 6,000 calories a day while playing in a mind sport tournament (ICPC), practice to push your brain reach that level of activation voluntarily