Skip to content

EliteProgrammersClub/awesome-competitive-programming

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

Awesome Competitive Programming Awesome

A curated list of awesome competitive programming / algorithm / data structure resources.

This list was created with a view to connect more people to information. It's aimed to cover a wide range of aspects and be a useful list for all.

What is competitive programming? - Quora

Contributing

Please kindly follow CONTRIBUTING.md to get started (including TODOs).

Table of Contents

Awesome Reference Materials

Algorithms and Data Structures

Awesome websites to lookup and learn algorithms and data structures.

Syllabuses

Find out what topics you need to learn.

  • IOI Syllabus
    A detailed syllabus on which IOI contestants will be tested. This is still somewhat relevant to ACM-ICPC.
  • Programming Camp Syllabus
    It contains a list of important topics in competitive programming with exercise problems.

List of Lists

These are some other awesome curated lists.

Implementations / Notebooks

Algorithm / Data structure implementations.
It is advised that you write your own ones before looking at others'.

  • CodeLibrary, by Andrey Naumenko (indy256)
    This site contains a large collection of implementations for algorithms and data structures in Java and C++. You may also visit his GitHub Repository.
  • Stanford University ACM Team Notebook (2014-15)
    Stanford's team notebook is well maintained and the codes within are high-quality.
  • bobogei81123/bcw_codebook, by team bcw0x1bd2 (darkhh, bobogei81123, step5) from National Taiwan University
    bcw0x1bd2 is the team representing National Taiwan University for the 2016 ACM-ICPC World Finals. This notebook contains robust implementations for advanced data structures and algorithms.
  • SuprDewd/CompetitiveProgramming, by team viRUs from Reykjavik University
    One of the very few notebooks to include a tester (even integration with Travis CI). A great notebook to learn from.
  • foreverbell/acm-icpc-cheat-sheet, by foreverbell (foreverbell)
    A notebook with some advanced data structures and algorithms including some from the China informatics scene.
  • Spaghetti Source - 各種アルゴリズムの C++ による実装 (Japanese), by 前原 貴憲 (maehara)
    A neatly categorized notebook in Japanese. This website is no longer being updated, but the topics discussed here are still relevant.
  • igor's code archive, by Igor Naverniouk (Abednego)
    A good notebook by Igor Naverniouk who is currently a software engineer at Google and part of the Google Code Jam team.

Language Specifics

This section mainly focuses on languages and other miscellaneous knowledge.

C/C++

Java

Miscellaneous

Tools

Awesome tools that will make your life easier.

Personal use

  • General Practice Helpers:
    These tools parse contests, inline library codes and provide testing frameworks.
    • CHelper, for IntelliJ IDEA (Java) (manual)
    • caide, for Visual Studio and CodeLite (C/C++/C#)
    • JHelper, for AppCode and CLion (C/C++)
  • Codeforces Parsers:
    These tools parse Codeforces contest problems and help run sample tests.
  • The On-Line Encyclopedia of Integer Sequences (OEIS)
    A stunning encyclopedia with a database of countless integer sequences. It also features a powerful search engine. Sometimes a seemingly difficult combinatorics problem can be equivalent to a simple or known and studied integer sequence.
  • VisuAlgo
    VisuAlgo features a large collection of visualization tools for algorithms and data structures.
  • Ineffable
    Ineffable is a simple command-line grader for local grading of solutions for problems of competitive programming contests.

Contest Preparation

Awesome Learning Materials

Open Courses

It's highly recommended that you begin your competitive programming journey with these awesome courses!

Open Courses for Algorithms and Data Structures

  • prakhar1989/awesome-courses#algorithms
    A fantastic list of open courses offered by notable institutions (MIT, Stanford, UC Berkeley ... etc.).
  • MIT SMA 5503: Introduction to Algorithms
    This one isn't included on the list above, but it's by far my personal favorite. This course was lectured by Prof. Charles Leiserson (coauthor of Introduction to Algorithms) and Prof. Erik Demaine who is a brilliant and established scholar in the field. The course offered great materials and generally more intuitive proofs and analyses.

Books

A list of recommended books for competitive programming.

Books for Algorithms

  • Introduction to Algorithms, by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein
    Also known as CLRS (taken from name initials), this book is often referred to as the "bible" for algorithms and data structures. It's one of the most popular textbooks for university algorithm courses. This book covered various algorithms and data structures in great detail. The writing is more rigorous and can be difficult to some.
  • Algorithm Design, by Jon Kleinberg and Éva Tardos
    This book revolves around techniques for designing algorithms. It's well-organized and written in a clear, understandable language. Each chapter is backed with practical examples and helpful exercises. The chapter on network flow is highly praised by lots.
    The lecture slides that accompany the textbook are available on its official website.
  • The Algorithm Design Manual, by Steven S. Skiena
    The book is written in more readable text. Some find it comprehensive than other books. You can also find some good resources (including the author's own video lectures) on its official website.
  • Algorithms, by Robert Sedgewick and Kevin Wayne
    This book is neatly categorized, coupled with elaborate explanations and fantastic illustrations. It seems to be used in some IOI training camps as textbook.

Books for Mathematics

  • Discrete Mathematics and Its Applications, by Kenneth H. Rosen
    Discrete Mathematics is closely relevant to competitive programming. This book provides comprehensive materials on a wide range of topics including: Logics and Proofs, Sets, Functions, Sequences, Matrices, Number Theory, Recursion, Counting, Probablity, Graphs, Trees and Boolean Alegra to name but a few.
  • Concrete Mathematics: A Foundation for Computer Science, by Ronald L. Graham, Donald E. Knuth, Oren Patashnik
    The book offers a deeper look into Discrete Mathematics with more stresses on number-related topics.
  • Linear Algebra and Its Applications, by David C. Lay, Steven R. Lay, Judi J. McDonald
    The book does a good job at bridging the gap between a physical system (for scientists and engineers) and an abstract system (for mathematicians).
  • Introduction to Probability, by Charles M. Grinstead, J. Laurie Snell
    This is a well-written introductory probabilities book. It's free for download (pdf) (released under GNU Free Documentation License).
  • How to Solve It: A New Aspect of Mathematical Method, by G. Polya
    An old-time classic. Overall, the author provides a systematic way to creatively solve problems.

Sites to Practice

Good online judges / contest platforms to practice.

  • Codeforces
    Codeforces is one of the most popular contest platforms in the world. Currently maintained by Saratov State University, it features regular contests and numerous awesome original problems. Every contest provides immediate helpful tutorials. Furthermore, many warm-hearted Codeforces members kindly answers questions on Codeforces. One would indeed learn and improve tremendously here.
  • topcoder
    topcoder has been around since 2001. Rich in history, It's considered to be one of the most prestigious organizations when it comes to technology competitions. Hundreds of SRMs gave birth to an abundant problemset. Problems here are typically more challenging than others. Hence, topcoder draws many elite programmers which makes the platform even more challenging and engaging. It has arguably been on a decline, but it still is a superb platform to practice. The annual topcoder Open (TCO) is also a widely-discussed event.
  • Google Code Jam
    Google Code Jam is certainly one of the most highly-esteemed programming competitions. The competition consists of unique programming challenges which must be solved in a fixed amount of time. Competitors may use any programming language and development environment to obtain their solutions.
  • CodeChef
    CodeChef is a non-profit educational initiative of Directi. It's a global competitive programming platform and has a large community of programmers that helps students and professionals test and improve their coding skills. Its objective is to provide a platform for practice, competition and improvement for both students and professional software developers. Apart from this, it aims to reach out to students while they are young and inculcate a culture of programming in India.
  • SPOJ
    The SPOJ platform is centered around an online judge system. It holds a staggering amount of problems prepared by its community of problem setters or taken from previous programming contests, some of which are great problems for practice (refer to the Problem classifiers section). SPOJ also allows advanced users to organize contests under their own rules.
  • Timus
    Timus Online Judge is the largest Russian archive of programming problems with automatic judging system. Problems are mostly collected from contests held at the Ural Federal University, Ural Championships, Ural ACM ICPC Subregional Contests, and Petrozavodsk Training Camps.
  • SGU
    SGU is an old-school online judge maintained by Saratov State University. A high-rated competitive programmer - Huang I-Wen (dreamoon) thinks that it's the hardest online judge because its problems require unusual skills.
  • HDU
    HDU is an online judge maintained by Hangzhou Dianzi University. It holds a pretty nice problemset. Users can also run virtual contests on this platform.
  • UVa
    An old-school problem archive / online judge with rich history. Thousands of problems, including many classic ones, are featured here. However, it is strongly advised that you practice with uHunt following its "Competitive Programming Exercise" section.
  • HackerRank
    HackerRank is a company that focuses on competitive programming challenges for both consumers and businesses. HackerRank's programming challenges can be solved in a variety of programming languages (including, but not limited to, Java, C++, PHP, SQL) and span multiple computer science domains.
  • POJ
    POJ is an online judge maintained by Peking University. It holds a large amount of great problems.
  • Project Euler
    There are lots of good math problems on this site. You may also discuss with others on its forum.
  • Hackerearth
    HackerEarth is a startup technology company based in Bangalore, India that provides recruitment solutions. Its clients include Adobe, Altimetrik, Citrix Systems, InMobi, Symantec and Wipro.
  • Aizu Online Judge
    Aizu online judge is a contest platform and problem archive hosted by The University of Aizu. It has a lot of great problems from programming competitions in Japan.

Problem Classifiers

Sites classifying programming problems.
Choose a category (eg. DP) of interest and practice problems on that topic.

Contest Calendars

Calendars for impending programming contests.
Never miss another contest!

Sites to ask Questions

These are great sites to ask questions.
It is suggested that you paste your codes at ideone or pastebin.

Appendix

Social Media

Meet the god-like competitive programmers!
Learn helpful tips, tutorials and insights from these people :)

Blogs

Team Wikis

Youtube and Livestreams

Quora

Visit Competitive Programming - Quora (Top 10 Most Viewed Writers).

Awesome people to follow
Michal Forišek (misof) Brian Bi (bbi5291) Jonathan Paulson (jonathanpaulson)
Miguel Oliveira (mogers) Egor Suvorov (yeputons) Michal Danilák (Mimino)
Bohdan Pryshchenko (I_love_Tanya_Romanova) Vladimir Novakovski (vnovakovski) Nick Wu (xiaowuc1)
Cosmin Negruseri Lalit Kundu (darkshadows) Ashish Kedia (ashish1294)
Johnny Ho (random.johnnyh) Thanh Trung Nguyen (I_love_Hoang_Yen) Anudeep Nekkanti (anudeep2011)
Steven Hao (stevenkplus) Raziman T.V. (razimantv) Joshua Pan (lonerz)

Other Awesome Articles and FAQs

License

Creative Commons Attribution 4.0 International

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

About

💎 A curated list of awesome competitive programming / algorithm / data structure resources

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published