jinshunlee / Competitive-programming-library

Code library for competitive programming purposes.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Competitive Programming Library

Code library for competitive programming purposes.


  • Curriculum: Practice plans for different levels.
  • Data Structures
  • Graphs
  • Math
  • Geometry
  • Strings
    • Prefix Automaton (KMP)
    • Suffix Trie
    • Suffix Array
    • Suffix Automaton
    • Aho Corasick
    • Z Algorithm
    • Manacher
  • Other Algorithms

Related Material

  • Topics Sheet: Different resources for competitive programming topics.
  • Problems Sheet: Manual categorization for a large number of problems on different online judges. This includes estimated difficulty, tags and other notes.
  • UVa-Solutions: Java solutions for most of the problems I solved on UVa online Judge. Codeforces submissions are not uploaded because they can be accessed by anyone. If you need solutions for problems in the Problems Sheet and on another online judge, tell me about them.


This project is still under development and is meant to provide a full guide for competitve programmers from beginners and going up to the maximum level possible:

  • More codes for a bunch of different algorithms will be added. You can contribute to codes by:
    • Fixing bugs and comments typos, adding or enhancing comments, improving naming conventions or code structure to make it cleaner, shorter or simpler. You can do this through issues or directly with a pull request.
    • Suggesting codes data structures/algorithms to be added. You can do this through issues.
  • The curriculum is a new branch and I am developing it through my experience in coaching at my home university and from my practice. Your contribution to this branch is highly appreciated due to the following issues.
    • Low difficulty levels get close to each other from my own perspective. That's why to set a difficulty for a problem, it needs an experienced coach or some test participants with the target cp experience.
    • Problems are too many! I solved +3,000 but I can say that this number could have been dramatically reduced and still had the same experience, if some one picked the problems for me. That's why problems (specially topic problems) need to be selected such that they cover the almost all experience points (tricks, techniques, implementation details ..etc). This always lead to exclude easy problems (not at the start-off level), but it's fine.

You can contribute to the curriculum by:

  • Editing plan description, style, content, topic resources, problems or any other thing related.
  • Following the plan as described and adding your own experience as a test participant. You can do this through google spreadsheets described in each plan.
  • In the future, practice guidlines and any can be added. You can contribute to this in any way you want (issues, pull requests or contact me to discuss it).


Competitive Programming Library is licensed under a Creative Commons Attribution 4.0 International License.


Code library for competitive programming purposes.

License:Creative Commons Attribution 4.0 International


Language:Java 100.0%