CP-DSA Resources

CP-DSA Resources

Collection of some amazing resources to boost your CP journey!

Prerequisite

Java Resources

Python

2. Set up your coding environment to tailor to CP/DSA.

You can start giving contests anytime now!!! Start with div4/div3, Solve problems from Codechef with low ratings first so that you will understand how these platforms work. Then try out other platforms

3. Solve Pattern printing problems to familiarize yourself with loops and build logical thinking.

4. Learn about Space complexity and Time complexity.

5. Read about basic data structures and implement them.

6. Learn about the inbuilt data structure library corresponding to your language.

Where to Practice problems and give contests?

  • DSA Focused: Leetcode, GeeksForGeeks, Atcoder, Coding Ninjas

    • CP+DSA Focused: Codeforces, Codechef, Atcoder, Leetcode

List of Important problems to cover for Interviews:

Road Map: (Not a Road Map but it makes you understand what topics to learn for CP and how to practice)

Topic wise Playlists:

STL(for C++):

Sorting Algorithms:

Two Pointers and Sliding Window: (IMP for Interviews)

Binary Search: (IMP for Interviews)

Data Structures

You can learn Data Structures like stack, queue, set, maps, and deque from your respective language libraries by searching on GFG website or from the 6th prerequisite (for C++ it will be completed in the STL or you can follow stack)

  1. Priority Queue
  2. Tries
  3. DSU (Adv)
  1. Segment Trees (Adv)
  2. Ordered Set (C++)
  3. Sparse Table
  4. Fenwick Trees (BIT) (Adv)

Dynamic Programming (IMP for Interviews)

Binary Trees (IMP for Interviews and only for DSA)

Graphs and Trees (IMP for Interviews)

Advanced Topics: (Only for CP)

  1. Digit DP
  2. DP on Trees

String Algorithms: (KMP, Z, manacher, String hashing)

  • Pepcoding (has many range of topics, only learn KMP, Z, Manacher, String Hashing) problems from CSES.

Game Theory:

Matrix Exponentiation: (Adv)

Useful Techniques:

Other Useful resources:

  1. CPalgorithms (The ultimate place to find explanations and code for many algorithms)

  2. USACO (Complete guide for CP)

  3. YouTube Channels for Post Contest Solutions

  1. Debugging Template (C++)

  2. Kenkooo (you can find a list of Atcoder contest problems)

  3. Oies (For pattern recognition, don’t use it during a contest)

  4. Atcoder DP contest (Really good problems on many variations of DP), solutions

  5. Clist (To see upcoming contests and Leetcode ranks like all India ranks and others)

  6. Extensions:

Sheets to practice:

  1. Striver A2Z Sheet

  2. Striver SDE Sheet (If you have less time)

  3. CSES problem set

  4. C2 Ladders (For CP, contains 100 good problems from CF for every rating)

  5. ACD Ladders (For CP, contains 100 good problems from CF for every rating, filter by tags is available)

  6. Progvar (Only for CP, has very good old topic-wise Codeforces problems)

  7. Neetcode Blind 75

Competitions:

  1. Facebook Hacker Cup

  2. ICPC

  3. TCS CodeVita

Youtube Channels to look out for:

  • Striver
  • Vivek Gupta
  • Errichto
  • Colin Galen (If you want to improve logical thinking and visualizing power do check his videos)
  • Abdul Bari
  • Second Thread (Adv)
  • Erricto and Erricto Algorithms (Adv)
  • CF step (Adv)
  • Coding Mohan (Adv)
  • Soumya Bhattacharjee (Adv)

Note:

  • Don’t jump into all the topics at once. Take some time and learn when it’s needed. (How will you know that you have to start learning a topic? Ans: Suppose you solved 3 problems in LC and not the 4th then start learning the topics on which the 4th question is based on).

  • Some playlists contain topics from beginner to advanced. So there is no need to complete all the videos from a Playlist. Take your time, and give a break if you don’t understand a topic.

  • You can find the topic-wise problems from playlists and you can also search problems based on tags in Leetcode, Codeforces, and Codechef.

General Advice:

  1. Must Upsolve after contest!!
  2. Do post contest discussion with friends.
  3. Create a healthy competition among peers.
  4. Take it as a marathon rather than a sprint.
  5. Practice practice and practice
  6. And don't forget to flex your achievements.
  7. Look at other people's code.
  8. Use editorials.