Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/AhmadElsagheer/Competitive-programming-library

Code library for competitive programming purposes.
https://github.com/AhmadElsagheer/Competitive-programming-library

Last synced: 9 days ago
JSON representation

Code library for competitive programming purposes.

Awesome Lists containing this project

README

        

# Competitive Programming Library
Code library for competitive programming purposes.

### Contents
- [Curriculum](curriculum): Practice plans for different levels.
- [Data Structures](data_structures)
- [Bitmasks](data_structures/linear/Bitmask.java)
- [Sortings](data_structures/sortings)
- [Merge Sort](data_structures/sortings/MergeSort.java)
- [Trees](data_structures/trees)
- [Fenwick Tree](data_structures/trees/FenwickTree.java)
- [Segment Tree](data_structures/trees/SegmentTree.java)
- [Quad Tree](trees/QuadTree.java)
- [Sparse Table](data_structures/SparseTable.java)
- [Disjoint-Sets Union](data_structures/UnionFind.java)
- [SQRT Decomposition](data_structures/SQRT_Decomposition.java)
- [Mo's Algorithm](data_structures/MoAlgorithm.java)
- [Skiplist](data_structures/SkipList.java)
- [Indexable Skiplist](data_structures/IndexableSkipList.java)
- [Heavy-Light Decomposition](data_structures/HLD.java)
- [Treaps](data_structures/TreapSet.java)
- [Graphs](graphs)
- [Graph Traversal and Basic Algorithms](graphs/traversal)
- [Graph Traversal](graphs/traversal/GraphTraversal.java)
- [Articulation Points and Bridges](graphs/traversal/ArticulationPointsAndBridges.java)
- [Bridge Tree](graphs/traversal/BridgeTree.java)
- [Strongly Connected Components](graphs/traversal/StronglyConnectedComponents1.java)
- [Kosaraju Algorithm](graphs/traversal/KosarajuAlgorithm.java)
- [Biconnected Components](graphs/traversal/BiconnectedComponents.java)
- [Shortest Path](graphs/shortest_path)
- [Single-Source Shortest Path](graphs/shortest_path/SSSP.java)
- [All-Pairs Shortest Path](graphs/shortest_path/APSP.java)
- [Minimum Spanning Tree](graphs/mst)
- [Prim's Algorithm](graphs/mst/MST_Prim.java)
- [Kruskal's Algorithm](graphs/mst/MST_Kruskal.java)
- [Special Graphs](graphs/special)
- [Euler Tour (for Eulerian Graphs)](graphs/special/EulerTour.java)
- [Maximum Cardinality Bipartite Matching](graphs/special/MCBM.java)
- [Max Flow](graphs/max_flow)
- [Edmonds-Karp Algorithm](graphs/max_flow/MaxFlow1.java)
- [Dinic's Algorithm](graphs/max_flow/MaxFlow2.java)
- [Tarjan's (Push-Relabel) Algorithm](graphs/max_flow/MaxFlow3.java)
- [Trees](graphs/trees)
- [Tree Traversal](graphs/trees/TreeTraversal.java)
- [Euler Walk (tin and tout)](graphs/trees/EulerWalk.java)
- [Lowest Common Ancestor](graphs/trees/LCA.java)
- [Tree Diameter](graphs/trees/TreeDiameter.java)

- Math
- Geometry
- Strings
- Prefix Automaton (KMP)
- Suffix Trie
- Suffix Array
- Suffix Automaton
- Aho Corasick
- Z Algorithm
- Manacher
- Other Algorithms

### Related Material
- [Topics Sheet](https://docs.google.com/spreadsheets/d/1tLEm58_2bQgM7qhATSjN0fGbdLLtaOCjUFnTGniHbjI): Different resources for competitive programming topics.
- [Problems Sheet](https://docs.google.com/spreadsheets/d/1blSbPr1pAFZSzlAi2IVdTeytz2yO7Ejx9SeQWOSxY0w): Manual categorization for a large number of problems on different online judges. This includes estimated difficulty, tags and other notes.
- [UVa-Solutions](https://github.com/AhmadElsagheer/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.

### Contributing
This project is still under development and is meant to provide a full guide for competitive 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 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 guidelines and any can be added. You can contribute to this in any way you want (issues, pull requests or [contact me](http://codeforces.com/profile/Ahmad_Elsagheer) to discuss it).

### License
Competitive Programming Library is licensed under a [Creative Commons Attribution 4.0 International License](https://creativecommons.org/licenses/by/4.0/).