244 KiB
244 KiB
Awesome Competitive Programming !Awesome (https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg) (https://github.com/sindresorhus/awesome)
A curated list of awesome Competitive Programming, Algorithm and Data Structure resources.
Created with a view to connecting people to information, this list below contains a complete collection of all the fantastic resources I've collected over the course of my 11-year competitive programming career.
I hope you'll find it useful :)
What is competitive programming? - Quora (https://www.quora.com/What-is-competitive-programming-2)
Contributing
Please kindly follow CONTRIBUTING.md (CONTRIBUTING.md) to get started.
You can also contribute by sharing!
Share the list with your classmates, your friends and everyone :)
▐ By connecting more people to information,
▐ You, are doing not me, but everyone a HUGE favor!
▐
▐ I really hope that more people can benefit from this list :)
Table of Contents
⟡ List of Lists (#list-of-lists)
⟡ Syllabuses (#syllabuses)
⟡ Tutorial Websites (#tutorial-websites)
⟡ Open Courses (#open-courses)
* **Open Courses for Algorithms and Data Structures** (#open-courses-for-algorithms-and-data-structures)
⟡ Books (#books)
* **Books for Algorithms** (#books-for-algorithms) | **Books for Mathematics** (#books-for-mathematics)
⟡ Sites for Practice (#sites-for-practice)
* **Problem Classifiers** (#problem-classifiers) | **Contest Calendars** (#contest-calendars)
⟡ Camps and Trainings (#camps-and-trainings)
⟡ Sites for Questions (#sites-for-questions)
⟡ Implementations (#implementations)
⟡ Language Specifics (#language-specifics)
* **C/C++** (#cc) | **Java** (#java) | **Miscellaneous** (#miscellaneous)
⟡ Tools (#tools)
* **IDEs** (#ides) | **Personal use** (#personal-use) | **Contest Preparation** (#contest-preparation)
⟡ Community (#community)
* **Blogs** (#blogs) | **Youtube and Livestreams** (#youtube-and-livestreams) | **Quora** (#quora)
⟡ Other Awesome Resources (#other-awesome-resources)
* **Articles** (#articles) | **FAQs** (#faqs) | **Awesome Lists** (#awesome-lists) | **Interview Questions** (#interview-questions)
⟡ License (#license)
List of Lists
▐ Awesome curated lists classified by topics.
│ ☆ │ Name │ Description │
├───┼───────────────────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│Good Blog Post Resources about Algorithm and Data Structures - Codeforces │A collection of fantastic tutorial blog posts written by Codeforces users. Some intriguing ones include │
│ │ (http://codeforces.com/blog/entry/13529) │Palindromic Trees, Policy Based Data Structures, and a lot more. │
│★★★│All of the good tutorials found on codeforces - Codeforces (http://codeforces.com/blog/entry/57282)│Another good collection of tutorial blog posts written by Codeforces users. │
│★★★│Data Structures and Algorithms - CodeChef Discuss │A very complete list of competitive programming resources. A must-have in your browser bookmark. │
│ │(https://www.quora.com/What-is-a-list-of-data-structures-that-a-competitive-programmer-must-know/an│ │
│ │swer/Sameer-Gulati-3) │ │
│★★★│How to prepare for ACM - ICPC? - GeeksforGeeks │A detailed walk-through of the preparations for ACM-ICPC. │
│ │ (https://www.geeksforgeeks.org/how-to-prepare-for-acm-icpc/) │ │
Syllabuses
▐ Find out what topics you need to learn.
│ ☆ │ Name │ Description │
├───┼───────────────────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│IOI Syllabus (https://people.ksp.sk/~misof/ioi-syllabus/) │A detailed syllabus on which IOI contestants will be tested. This is still somewhat relevant to ACM-ICPC.│
│★★★│How to prepare for ACM - ICPC? - GeeksforGeeks │A detailed walk-through of the preparations for ACM-ICPC. │
│ │ (https://www.geeksforgeeks.org/how-to-prepare-for-acm-icpc/) │ │
│★★☆│Programming Camp Syllabus │A list of important topics in competitive programming with exercise problems. │
│ │ (https://docs.google.com/document/d/1_dc3Ifg7Gg1LxhiqMMmE9UbTsXpdRiYh4pKILYG2eA4/edit) │ │
│★★☆│Juniors Training Sheet (https://goo.gl/unDETI), by Mostafa Saad Ibrahim │~800 ordered problems for newcomers to be good up to Div2-D │
│ │(https://sites.google.com/site/mostafasibrahim/) │ │
Tutorial Websites
▐ Awesome websites with great tutorials.
│ ☆ │ Name │ Description │
├───┼─────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│Topcoder Data Science Tutorials │A list of tutorials written by respected Topcoder members. Many top programmers started learning data sciences from here. │
│ │ (https://www.topcoder.com/community/data-science/data-science-tutorials/) │ │
│★★★│E-Maxx (Russian) (http://e-maxx.ru/algo/), (English) │A tutorial website widely used and referenced in the Russian-speaking competitive programming community. Most of the articles │
│ │(http://cp-algorithms.com/) │of the original site have been translated into English, Google Translate works okay for the remaining ones. │
│★★☆│Algorithms - GeeksforGeeks │A website with a large archive of nicely written articles on different topics. It is a great complimentary resource for │
│ │ (https://www.geeksforgeeks.org/fundamentals-of-algorithms/) │algorithm courses. │
│★★☆│PEGWiki (http://wcipeg.com/wiki/Special:AllPages) │A website with amazing in-depth wiki-like writeups on many topics. It's far better than those on Wikipedia in my opinion. │
│★★☆│Notes - HackerEarth (https://www.hackerearth.com/practice/notes/trending/) │A great crowdsourcing platform for tutorials. Also visit Code Monk (https://www.hackerearth.com/practice/codemonk/). │
│★★☆│USA Computing Olympiad (USACO) (http://www.usaco.org/) │Contains several training pages on its website which are designed to develop one's skills in programming solutions to difficult│
│ │ │and varied algorithmic problems at one's own pace. │
│★★☆│basecs (https://medium.com/basecs) │A blog with in-depth, illustrated tutorials on basic algorithms and data structures. │
│★★☆│Competitive Programming - Commonlounge │Short video tutorials for beginner and intermediate concepts. Advanced tutorials selected from the best ones available on │
│ │(https://www.commonlounge.com/discussion/d4a14f601eb44281b6c579e73d126cca/mai│various CP blogs. │
│ │n?r=acp) │ │
│★☆☆│OLYMPIADS IN INFORMATICS │An international journal focused on the research and practice of professionals who are working in the field of teaching and │
│ │ (https://www.mii.lt/olympiads_in_informatics/index.html) │learning informatics to talented student. │
│★☆☆│algolist (Russian) (http://algolist.manual.ru/) │A Russian website devoted to algorithms of all sorts. Some topics listed on this website seems pretty interesting. │
│★★☆│演算法筆記 (Algorithm Notes) (Chinese) (http://web.ntnu.edu.tw/~algo/) │One of the most popular tutorial websites among the Taiwanese competitive programming community. The maintainer for this │
│ │ │website spends immense efforts on researching algorithms. │
│★★☆│国家集训队论文 1999-2015 (Papers from Chinese IOI training camps) (Chinese) │Papers from the Chinese IOI training camps. It's interesting for the fact that one can tell different regions emphasize │
│ │ (http://download.csdn.net/album/detail/657/1/1) │different things. │
│★★★│Mini-Editorials (https://github.com/mostafa-saad/MyCompetitiveProgramming), │Solutions with mini-editorials for many problems, including UVA/SPOJ/IOI/Olympiad problems │
│ │by Mostafa Saad Ibrahim (https://sites.google.com/site/mostafasibrahim/) │ │
│ │trainees │ │
│★★☆│OI Wiki (Competitive Programming) (Chinese) (https://oi-wiki.org/) │OI Wiki is committed to being a free and open continuously updated programming competition (competitive programming) knowledge │
│ │ │integration site. This wiki is a sort of companion or guide for the competitive programmer who's trying to learn something │
Open Courses
▐ Consider beginning your competitive programming journey with these awesome courses!
│ ☆ │ Name │ Description │
├───┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────┤
│★★☆│Code Monk (https://www.hackerearth.com/practice/codemonk/), by HackerEarth │A fantastic step-by-step tutorial on the essential topics in competitive programming. │
│★★★│Stanford CS 97SI: Introduction to Competitive Programming Contests (http://web.stanford.edu/class/cs97si/) │Offers comprehensive lecture slides and a short list of exercise problems. │
│★★☆│How to Win Coding Competitions: Secrets of Champions │A course by ITMO University on competitive coding on edX. │
│ │ (https://www.edx.org/course/how-to-win-coding-competitions-secrets-of-champions-0) │ │
│★★☆│Codechef's Indian Programming Camp (https://www.youtube.com/playlist?list=PLi0ZM-RCX5nsTc2Z6woHr5qoF6n3b-thO)│Video Lectures from Codechef's Indian Programming Camp 2016 │
│ │ │(https://blog.codechef.com/2016/08/03/lectures-from-indian-coding-camp/). Lectures given by top│
│ │ │competitive programmers like Sergey Kulik, Kevin Charles Atienza and Anudeep Nekkanti. │
│ │ │Primarily focused on exploring these concepts by applying them to actual competitive contest │
│ │ │problems. │
│★★☆│Reykjavik T-414-ÁFLV: A Competitive Programming Course (https://algo.is/competitive-programming-course/) │An awesome course taught by Bjarki Ágúst Guðmundsson (SuprDewd) (https://algo.is). These │
│ │ │lectures feature neat slides and a nice list of problems to practice. │
│★★☆│NCTU DCP4631: Problem Solving and Programming Techniques │A course on basic topics featuring good lecture slides. │
│ │ (https://sites.google.com/site/mzshieh/courses/problem-solving-and-programming-techniques-spring-2014) │ │
│★☆☆│Materials (English) (https://github.com/mostafa-saad/ArabicCompetitiveProgramming) from Arabic Competitive │Some materials (slides & source codes) covering a broad range of algorithmic topics by Mostafa │
│ │Programming YouTube Channel (https://www.youtube.com/user/nobody123497) │Saad Ibrahim. │
Open Courses for Algorithms and Data Structures
│ ☆ │ Name │ Description │
├───┼──────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│prakhar1989/awesome-courses#algorithms │A fantastic list of open courses offered by notable institutions (MIT, Stanford, UC Berkeley ... etc.). │
│ │ (https://github.com/prakhar1989/awesome-courses#algorithms) │ │
│★★★│MIT SMA 5503: Introduction to Algorithms │Lectured by Prof. Charles Leiserson (one of the coauthors of Introduction to Algorithms) and Prof. Erik Demaine (a │
│ │(https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introd│brilliant professor who has made remarkable breakthroughs in data science), the course offers great materials, │
│ │uction-to-algorithms-sma-5503-fall-2005/) │accompanied by intuitive and comprehensive analyses. │
│★★☆│UIUC Algorithm Course (http://jeffe.cs.illinois.edu/teaching/algorithms/) │lecture notes, homeworks, exams, and discussion problems covering a broad range of algorithmic topics │
Books
▐ A list of recommended books for competitive programming.
│ ☆ │ Name │ Description │
├───┼───────────────────────────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★☆│Competitive Programming (https://cpbook.net/), by Steven and Felix Halim │This book contains a collection of relevant data structures, algorithms, and programming tips. │
│ │ │It's a well-received book. ... The first edition is free for download (pdf) │
│ │ │(http://www.comp.nus.edu.sg/~stevenha/myteaching/competitive_programming/cp1.pdf). │
│★★☆│Programming Challenges: The Programming Contest Training Manual │This book includes more than 100 programming challenges, as well as the theory and key concepts │
│ │(https://www.amazon.com/Programming-Challenges-Contest-Training-Computer/dp/0387001638), by Steven Skiena │necessary for approaching them. Problems are organized by topic, and supplemented by complete │
│ │and Miguel Revilla │tutorial material. │
│★★☆│Competitive Programmer's Handbook (https://cses.fi/book/index.html), by Antti Laaksonen │An introduction to competitive programming for aspiring IOI and ICPC contestants. Free to │
│ │ │download (pdf) (https://cses.fi/book/book.pdf). │
│★★☆│Algorithmic Thinking: A Problem-Based Introduction │A book that teaches data structures and algorithms using competitive programming problems (IOI, │
│ │ (https://nostarch.com/algorithmic-thinking), by Daniel Zingaro │USACO, CCC/CCO, etc.). │
│★★☆│Computational Geometry: Algorithms and Applications │This is a well-written book which covers a broad range of computational geometry problems. │
│ │(https://www.amazon.com/Computational-Geometry-Applications-Mark-Berg/dp/3540779736), by Mark de Berg, │ │
│ │Otfried Cheong, Marc van Kreveld, Mark Overmars │ │
│★☆☆│The Hitchhiker’s Guide to the Programming Contests │This book is free for download (pdf) (http://comscigate.com/Books/contests/icpc.pdf). This book │
│ │ (http://comscigate.com/Books/contests/icpc.pdf), by Nite Nimajneb │covers various topics relevant to competitive programming. │
│★★★│プログラミングコンテストチャレンジブック (Japanese) (http://goo.gl/M4yfbr), by 秋葉拓哉, 岩田陽一, 北川宜稔│An absolutely phenomenal book. The contents, organized in a very coherent manner, are nothing │
│ │ │short of amazing. ... 培養與鍛鍊程式設計的邏輯腦:世界級程式設計大賽的知識、心得與解題分享 │
│ │ │(Chinese Traditional) │
│★★☆│算法竞赛入门经典 (Chinese) (http://www.tup.com.cn/booksCenter/book_05568701.html), by 刘汝佳 │The Art of Algorithms and Programming Contests (English), │
│ │ │打下好基礎:程式設計與演算法競賽入門經典 (Chinese Traditional) │
│★★☆│算法竞赛入门经典——训练指南 (Chinese) │提升程式設計的解題思考力─國際演算法程式設計競賽訓練指南 (Chinese Traditional) │
│ │ (https://www.amazon.cn/算法竞赛入门经典-训练指南-刘汝佳/dp/B009SJJGOU), by 刘汝佳, 陈锋 │ │
│★★★│算法艺术与信息学竞赛 (Chinese) (http://goo.gl/O1tr8v), by 刘汝佳, 黄亮 │An old-time classic. It's old but the contents in this book are still considered to be very │
│ │ │difficult by today's standards. │
Books for Algorithms
│ ☆ │ Name │ Description │
├───┼────────────────────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│Introduction to Algorithms (https://mitpress.mit.edu/books/introduction-algorithms), by Thomas H. │Also known as CLRS (taken from name initials), this book is often referred to as the "bible" for │
│ │Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein │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 (http://amzn.to/VjhioK), 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 (http://www.cs.princeton.edu/~wayne/kleinberg-tardos/). │
│★★☆│The Algorithm Design Manual │The book is written in more readable text. Some find it comprehensive than other books. You can also │
│ │ (https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693), by Steven S. Skiena │find some good resources (including the author's own video lectures) on its official website │
│ │ │(http://www.algorist.com). │
│★★★│Algorithms (https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X), by Robert │This book is neatly categorized, coupled with elaborate explanations and fantastic illustrations. It is │
│ │Sedgewick and Kevin Wayne │used in some IOI training camps as a textbook. │
│ │Algorithms and Data Structures in Action │This book provides a different approach to algorithms, balancing theory with a more practical angle, │
│ │ (https://www.manning.com/books/algorithms-and-data-structures-in-action), by Marcello La Rocca │with a section per-chapter focusing on how to apply algorithms to real-world use cases that can be found│
│ │ │in your daily work, or in competitive programming; it also presents a blend of classic, advanced, and │
│ │ │new algorithms. │
│★★★│Algorithms (https://jeffe.cs.illinois.edu/teaching/algorithms/), by Jeff Erickson │A free electronic version of a self-published textbook licensed under CC by 4.0. This is a well written │
│ │ │book from lecture notes of theoretical computer science courses at the University of Illinois. Covers │
│ │ │the main paradigms of backtracking, dynamic programming, greedy, and particularly graphs in depth. │
Books for Mathematics
│ ☆ │ Name │ Description │
├───┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────┤
│★★☆│Discrete Mathematics and Its Applications │Discrete Mathematics is closely relevant to competitive │
│ │ (https://www.amazon.com/Discrete-Mathematics-Applications-Kenneth-Rosen/dp/0072899050), by Kenneth H. Rosen │programming. This book provides comprehensive materials on│
│ │ │a wide range of topics including: Logics and Proofs, Sets,│
│ │ │Functions, Sequences, Matrices, Number Theory, Recursion, │
│ │ │Counting, Probability, Graphs, Trees and Boolean Alegra to│
│ │ │name but a few. │
│★★☆│Concrete Mathematics: A Foundation for Computer Science │The book offers a deeper insight into Discrete Mathematics│
│ │ (https://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025), by Ronald L. Graham, Donald E. Knuth, Oren Patashnik │with more emphases on number-related topics. │
│★★☆│Linear Algebra and Its Applications │The book does a brilliant job at bridging the gap between │
│ │(https://www.amazon.com/Linear-Algebra-Its-Applications-5th/dp/032198238X/ref=sr_1_1?ie=UTF8&qid=1455475253&sr=8-1&keywords=Linear+Algebra+and+Its│a physical system (for scientists and engineers) and an │
│ │+Applications), by David C. Lay, Steven R. Lay, Judi J. McDonald │abstract system (for mathematicians). │
│★★☆│Introduction to Probability │This is a well-written introductory probabilities book. │
│ │ (http://www.dartmouth.edu/~chance/teaching_aids/books_articles/probability_book/book.html), by Charles M. Grinstead, J. Laurie Snell │... It's free for download (pdf) │
│ │ │(http://www.dartmouth.edu/~chance/teaching_aids/books_arti│
│ │ │cles/probability_book/amsbook.mac.pdf) (released under GNU│
│ │ │Free Documentation License). │
│★★☆│How to Solve It: A New Aspect of Mathematical Method (https://www.amazon.com/How-Solve-It-Mathematical-Princeton/dp/069111966X), by G. Polya │An old-time classic. In this book, the author provides a │
│ │ │systematic way to solve problems creatively. │
│★★☆│Intermediate Counting & Probability (https://artofproblemsolving.com/store/item/intermediate-counting), by David Patrick │Topics in counting and probability byformer USA │
│ │ │Mathematical Olympiad winner David Patrick , topics │
│ │ │include inclusion-exclusion, 1-1 correspondences, the │
│ │ │Pigeonhole Principle, constructive expectation, Fibonacci │
│ │ │and Catalan numbers, recursion, conditional probability, │
│ │ │generating functions, graph theory, and much more.. │
Sites for Practice
▐ Good online judge systems / contest platforms to practice.
│ ☆ │ Name │ Description │
├───┼─────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│Codeforces (http://codeforces.com/) │Codeforces is one of, if not, the most popular contest platforms out there. Currently maintained by Saratov State University, it features regular contests and │
│ │ │countless awesome original problems. Additionally, every contest provides immediate helpful tutorials (usually) written by the authors themselves. Codeforces also │
│ │ │houses a strong and engaging community. All in all, one would indeed learn and improve tremendously here. │
│★★★│Topcoder (https://www.topcoder.com/) │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 and Topcoder therefore appeals to many elite │
│ │ │programmers. 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 │
│ │ (https://code.google.com/codejam/) │in a fixed amount of time. Competitors may use any programming language and development environment to obtain their solutions. │
│★★★│AtCoder (https://atcoder.jp) │AtCoder is a new but phenomenal contest platform created by a team of highly-rated Japanese competitive programmers. │
│★★☆│CodeChef (https://www.codechef.com/) │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 (https://www.spoj.com/) │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 (#problem-classifiers) section). SPOJ also allows │
│ │ │advanced users to organize contests under their own rules. │
│★★☆│Timus (http://acm.timus.ru/) │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. │
│★☆☆│HDU (http://acm.hdu.edu.cn/) │HDU is an online judge maintained by Hangzhou Dianzi University. It's home to many classic problems from the Chinese IOI scene. │
│★★☆│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. │
│ │(http://judge.u-aizu.ac.jp/onlinejudg│ │
│ │e/index.jsp) │ │
│★★☆│UVa (https://uva.onlinejudge.org/) │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 (https://uhunt.onlinejudge.org/id/0) 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 │
│ │ (https://www.hackerrank.com) │variety of programming languages and span multiple computer science domains. │
│★★☆│POJ (http://poj.org/) │POJ is an online judge with many great problems maintained by Peking University. Most Chinese competitive programmers began their journey here. The platform is really │
│ │ │dated so mysterious compilation and run-time issues may occur. │
│★★☆│Project Euler │Project Euler features a stunning set of good math problems. It also hosts a forum where people can discuss. │
│ │ (https://projecteuler.net/) │ │
│★☆☆│Hackerearth │HackerEarth is a startup technology company based in Bangalore, India that provides recruitment solutions. │
│ │ (https://www.hackerearth.com/) │ │
│★☆☆│Caribbean Online Judge │COJ is hosted by University of Informatics Sciences (UCI, by its acronym in Spanish), located in Cuba. Feature ACM ICPC and Progressive contest styles, mostly from │
│ │ (http://coj.uci.cu/index.xhtml) │Caribbean and Latin American problem setters, also has problem classifier and contest calendar. │
│★★☆│CS Academy (https://csacademy.com) │New in the competitive programming scene, CS Academy is a growing online judge that hosts competitions once every two weeks. It supports live chat, interactive lessons│
│ │ │and an integrated online editor (that actually works). │
│★★☆│Russian Code Cup │Programming competitions powered by Mail.Ru Group. Competition consists of 3 qualification, 1 elimination and 1 final rounds. For each round contestants are given 4-8 │
│ │ (https://www.russiancodecup.ru/en/) │problems which must be solved in a fixed amount of time. │
│★★☆│CodeFights (https://codesignal.com/) │CodeFights is a website for competitive programming practice and interview preparation. It features daily challenges of varying difficulty, an archive of problems and │
│ │ │regular (every 15 minutes) mini-tournaments. Good for beginners. │
│★★☆│OmegaUp │OmegaUp is a community-based website for competitive programing training. It's also where Mexican Olympiad in Informatics (OMI : Olimpiada Mexicana de Informática) is │
│ │ (https://omegaup.com/) (Spanish) │hosted. │
Problem Classifiers
▐ Sites classifying programming problems.
Choose a category (eg. DP) of interest and practice problems on that topic.
│ ☆ │ Name │ Description │
├───┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────┤
│★★★│A2 Online Judge (https://a2oj.com/Categories.jsp) │Mixed │
│★★★│Problem Classifier (http://problemclassifier.appspot.com/) │SPOJ │
│★★☆│UVa Online Judge (https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8) │CP Book │
│★☆☆│Codeforces Tags (http://codeforces.com/problemset?tags=dp) │CF (DP) │
│★★☆│HackerRank (https://www.hackerrank.com/domains/algorithms?filters%5Bsubdomains%5D%5B%5D=warmup) │HackerRank │
│★★☆│Juniors Training Sheet (https://goo.gl/unDETI), by Mostafa Saad Ibrahim (https://sites.google.com/site/mostafasibrahim/)│~800 ordered problems for newcomers to be good up to Div2-D│
│★★☆│Lucky貓的 UVA(ACM)園地 (Chinese) (http://luckycat.kshs.kh.edu.tw/) │UVa │
│★★☆│Topcoder problem archive (https://community.topcoder.com/tc?module=ProblemArchive) │List of problems with categories and complexity levels │
Contest Calendars
▐ Calendars for impending programming contests.
(Never miss another contest!)
│ ☆ │ Name │ Description │
├───┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────┤
│★★★│Programming Contest Calendar - HackerRank (https://www.hackerrank.com/calendar) │Google Calendar export available│
│★★☆│clist.by (https://clist.by/) │API available for use │
│★★☆│Coding Calendar (Android App) (https://play.google.com/store/apps/details?id=com.limitskyapps.CodingCalendar) │ │
│★★☆│Coder's Calendar (https://github.com/nishanthvijayan/CoderCalendar): Android App (https://play.google.com/store/apps/details?id=com.corphots.coderscalendar), Chrome │ │
│ │Extension (https://chrome.google.com/webstore/detail/coders-calendar/bageaffklfkikjigoclfgengklfnidll), Firefox Add-on │ │
│ │(https://addons.mozilla.org/en-US/firefox/addon/coder-calendar/) │ │
│★★★│CodeHorizon (http://codehorizon.star-lord.me/): iOS App (https://itunes.apple.com/in/app/codehorizon/id925056167?mt=8), Android App │ │
│ │(https://play.google.com/store/apps/details?id=com.chintanghate.CodeHorizon) │ │
│★★★│Competitive Programming Contests Calendar (https://competitiveprogramming.info/calendar) │Google Calendar export available│
Sites for Questions
▐ These are great sites to ask questions.
Paste your codes at ideone (https://ideone.com/), pastebin (https://pastebin.com/) or other sites to avoid formatting issues.
│ ☆ │ Name │ Description │
├───┼─────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│Codeforces (http://codeforces.com/) │For quick answers, Codeforces is definitely the go-to place to ask about anything competition-related. │
│★★★│Competitive Programming - Quora (https://www.quora.com/topic/Competitive-Programming)│You would typically get more elaborate answers on Quora, but you might not have your questions answered straightaway.│
│★★☆│Theoretical Computer Science Stack Exchange (https://cstheory.stackexchange.com/) │This place is generally for the academics, so don't ask questions about contest problems here. │
Camps and Trainings
▐ Online Trainings and Camps.
│ ☆ │ Name │ Description │
├───┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────┤
│★★★│Online Free Problem-Solving Coaching (https://codeforces.com/blog/mostafa.saad.fci), by Mostafa Saad Ibrahim │See the coaching details and people comments on its nature/quality.│
│ │(https://sites.google.com/site/mostafasibrahim/) │ │
Implementations
▐ Algorithm & Data structure implementations.
│ ☆ │ Name │ Description │
├───┼──────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│CodeLibrary (http://code-library.herokuapp.com/), by Andrey Naumenko (indy256) │CodeLibrary contains a large collection of implementations for algorithms and data structures in Java │
│ │ │and C++. You may also visit his GitHub Repository (https://github.com/indy256/codelibrary). │
│★★★│spaghetti-source/algorithm │High-quality implementations of many hard algorithms and data structures. │
│ │ (https://github.com/spaghetti-source/algorithm), by Takanori MAEHARA (@tmaehara) │ │
│★★★│kth-competitive-programming/kactl │A phenomenally organized, documented and tested team notebook from KTH Royal Institute of Technology. │
│ │ (https://github.com/kth-competitive-programming/kactl), by Simon Lindholm (simonlindholm) et al. │One of the most well-crafted team notebooks (contest libraries) I've ever seen. │
│★★☆│jaehyunp/stanfordacm (https://github.com/jaehyunp/stanfordacm) │Stanford's team notebook is well maintained and the codes within are of high-quality. │
│★★☆│ngthanhtrung23/ACM_Notebook_new (https://github.com/ngthanhtrung23/ACM_Notebook_new), by team RR │RR Watameda represented National University of Singapore for the 2016 ACM-ICPC World Finals. The items│
│ │Watameda (I_love_Hoang_Yen, flashmt, nguyenhungtam) from National University of Singapore │in this notebook are pretty standard and well-organized. │
│★★☆│bobogei81123/bcw_codebook (https://github.com/bobogei81123/bcw_codebook), by team bcw0x1bd2 (darkhh, │bcw0x1bd2 represented National Taiwan University for the 2016 ACM-ICPC World Finals. This notebook │
│ │bobogei81123, step5) from National Taiwan University │contains robust implementations for advanced data structures and algorithms. │
│★☆☆│foreverbell/acm-icpc-cheat-sheet │A notebook with some advanced data structures and algorithms including some from the China informatics│
│ │ (https://github.com/foreverbell/acm-icpc-cheat-sheet), by foreverbell (foreverbell) │scene. │
│★☆☆│igor's code archive (http://shygypsy.com/tools/), 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
▐ Languages and other miscellaneous knowledge.
C/C++
│ ☆ │ Name │ Description │
├───┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┤
│★★☆│Power up C++ with the Standard Template Library - Topcoder: Part 1 │An introductory tutorial on basic C++ STLs. │
│ │(https://www.topcoder.com/community/data-science/data-science-tutorials/power-up-c-with-the-standard-template-library-part-1/), │ │
│ │Part 2 │ │
│ │(https://www.topcoder.com/community/data-science/data-science-tutorials/power-up-c-with-the-standard-template-library-part-2/) │ │
│★★☆│Yet again on C++ input/output - Codeforces (http://codeforces.com/blog/entry/5217) │Learn more about C++ I/O optimizations. │
│★★☆│C++ Tricks - Codeforces (http://codeforces.com/blog/entry/15643) ... What are some cool C++ tricks to use in a programming │Plentiful C++ tricks for competitive programming. Note that some should be │
│ │contest? - Quora (https://www.quora.com/Competitive-Programming/What-are-some-cool-C++-tricks-to-use-in-a-programming-contest) │used with care. │
│★★★│C++ STL: Policy based data structures - Codeforces: Part 1 (http://codeforces.com/blog/entry/11080), Part 2 │Detailed introduction to the extra data structures implemented in GNU C++. │
│ │(http://codeforces.com/blog/entry/13279) │The official documentation can be found here │
│ │ │(https://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/). │
│★☆☆│C++11 FAQ (English, Chinese, Russian, Japanese, Korean) (http://www.stroustrup.com/C++11FAQ.html) │A list of FAQs regarding C++11 collected and written by Bjarne Stroustrup, │
│ │ │the creator of C++. │
Java
│ ☆ │ Name │ Description │
├───┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────┤
│★★☆│How to read input in Java — tutorial - Codeforces (http://codeforces.com/blog/entry/7018) │Learn how to read input faster. This is a must-read for those who intend to use Java for │
│ │ │competitive programming │
│★★☆│How to sort arrays in Java and avoid TLE - Codeforces (http://codeforces.com/blog/entry/7108) │Some tips on how to avoid hitting the worst case of quick sort │
│★★☆│BigNum arithmetic in Java — Let's outperform BigInteger! - Codeforces (http://codeforces.com/blog/entry/17235)│A basic but faster custom BigInteger class │
│★★☆│EZ Collections, EZ Life (new Java library for contests) - Codeforces (http://codeforces.com/blog/entry/14328) │A Java library for contests written by Alexey Dergunov (dalex). ArrayList, ArrayDeque, Heap, │
│ │ │Sort, HashSet, HashMap, TreeSet, TreeMap, TreeList and pair classes are implemented │
Miscellaneous
│ ☆ │ Name │ Description │
├───┼───────────────────────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│Bit Twiddling Hacks (https://graphics.stanford.edu/~seander/bithacks.html) │A huge compiled list of bit manipulation tricks. │
│★★★│Comparing Floating Point Numbers, 2012 Edition - Random ASCII │Everything you need to know about floating point numbers. A must read especially for geometry topics.│
│ │ (https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/) │ │
│★★☆│Object-Oriented C Style Languages: C++, Objective-C, Java, C# - a side-by-side reference sheet │A detailed side-by-side reference sheet for common syntaxes. │
│ │ (http://hyperpolyglot.org/cpp) │ │
Tools
▐ Awesome tools that will make your life easier.
IDEs
│ ☆ │ Name │ Platform │ Description │
├───┼──────────────────────────────────────────┼─────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│Vim (https://www.vim.org/download.php) │CLI / │Vim is one of the most popular text editors among advanced programmers. It allows text-editing to be done very efficiently with solely │
│ │ │Cross-Platform │keystrokes. Vim is also highly configurable, extensible and integrates with shells (command lines) really well. The only setback about Vim is │
│ │ │ │that it has a high learning curve for beginners. │
│★★★│Emacs │CLI / │Emacs is another popular text editor (or development environment to be more precise). The debate on "Vim vs. Emacs" is constantly brought up due│
│ │(https://www.gnu.org/software/emacs/downlo│Cross-Platform │to their popularity. Basically Emacs is more than just a text editor. It has plugins like file managers, web browsers, mail clients and news │
│ │ad.html) │ │clients that allows users to performs these tasks directly inside Emacs. Emacs is "heavier" because of this, but it arguably has a relatively │
│ │ │ │easier learning curve for beginners. │
│★★★│Far Manager │Hybrid / Windows │Far Manager is the most widely-used editor in the RU/CIS competitive programming community. It's actually a file manager in its bare bones, but │
│ │(https://www.farmanager.com/download.php?l│ │you can install FarColorer (http://colorer.sourceforge.net/farplugin.html) - a syntax highlighter plugin to program on it. Properly configured, │
│ │=en) │ │Far Manager allows you to navigate between files very efficiently while writing your codes. │
│★★★│Code::Blocks │GUI / │Code::Blocks is the go-to IDE for C/C++. It's a full-fledged, versatile IDE with numerous great features. Code::Blocks is usually provided along│
│ │ (http://codeblocks.org/downloads) │Cross-Platform │with Vim in programming contests. │
│★★★│IntelliJ IDEA │GUI / │IntelliJ IDEA is certainly one of the best IDEs for Java. It's used by most competitive programmers who use Java as their main language. Be sure│
│ │(https://www.jetbrains.com/idea/#chooseYou│Cross-Platform │to check out CHelper (https://plugins.jetbrains.com/plugin/7091-chelper), a very handy plugin written for programming contests. │
│ │rEdition) │ │ │
│★★☆│Sublime Text │GUI / │Sublime Text is an extraordinary text editor. Packed with powerful and innovative features like Multiple Carets, Minimaps and Command Palletes, │
│ │ (https://www.sublimetext.com/3) │Cross-Platform │it attracts a strong and engaging community. Sublime Text is highly extensible, so be sure to have Package Control (https://packagecontrol.io/) │
│ │ │ │installed and explore perhaps one of the largest catalogue of plugins! │
│★★☆│Eclipse │GUI / │Eclipse is another good IDE for Java. It's an okay alternative to Intellij IDEA (A tad inferior to IDEA by today's standards). Sometimes │
│ │ (https://www.eclipse.org/downloads/) │Cross-Platform │contests only provide Eclipse for some reason, so this might be a good incentive to try and use Eclipse. │
│★★☆│CLion │GUI / │CLion, produced by JetBrains - the same company who made Intellij IDEA, is a powerful IDE for C++. Free educational licenses are available OR │
│ │(https://www.jetbrains.com/clion/download/│Cross-Platform │you can try out their EAP (Early Access Program) (https://confluence.jetbrains.com/display/CLION/Early+Access+Program) which is still free as of│
│ │) │ │Apr, 2018. You may want to turn off its code inspection feature as it will cause quite a bit of lag. │
│★☆☆│Other IDEs │Mixed │Visual Studio (https://visualstudio.microsoft.com/vs/community/) is the IDE to use in case you want to code in C#. ... Both Atom │
│ │ │ │(https://atom.io/) and Visual Studio Code (https://code.visualstudio.com/) are built with Electron (written in JavaScript) and therefore │
│ │ │ │somewhat resource-hogging. ... CodeLite (https://codelite.org/) is a newly rising IDE. Beware that the load-up and project-creation times can be│
│ │ │ │extraordinary. │
Personal use
│ ☆ │ Name │ Description │
├───┼───────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│VisuAlgo (https://visualgo.net/en) │A website featuring a large collection of visualization tools for algorithms and data structures. │
│★★★│General Practice Helpers: ... CHelper │Great tools that parse contests, inline library codes and provide testing frameworks. They save you from spending your precious │
│ │(https://plugins.jetbrains.com/plugin/7091-chelper) (IntelliJ IDEA) (manual│time on switching windows and copy-pasting back and forth. │
│ │(http://codeforces.com/blog/entry/3273)) ... caide │ │
│ │(https://github.com/slycelote/caide) (Visual Studio, CodeLite, standalone │ │
│ │command line app) ... JHelper (http://codeforces.com/blog/entry/13369) │ │
│ │(AppCode, CLion) online-judge-tools │ │
│ │(https://github.com/kmyk/online-judge-tools) (Stand alone CLI tool, It is │ │
│ │actively maintained.) │ │
│★★☆│Codeforces Parsers: ... Codeforces Parser │These tools parse Codeforces contest problems and help run sample tests. │
│ │(https://github.com/johnathan79717/codeforces-parser) ... GoCF │ │
│ │(https://github.com/sukeesh/GoCF) ... cfparser │ │
│ │(https://github.com/gnull/cfparser) (emacs) cfparser │ │
│ │(https://github.com/ikatanic/cfparser) (cli) │ │
│★★★│The On-Line Encyclopedia of Integer Sequences (OEIS) (https://oeis.org/) │A stunning encyclopedia with a database of countless integer sequences. It also features a powerful search engine. Sometimes a │
│ │ │seemingly difficult combinatorics problem could be equivalent to a simple or studied integer sequence. │
│★★☆│Syntax Highlighters: ... tohtml.com (https://tohtml.com/) ... markup.su │Very handy for creating slides or team notebooks with pretty, formatted code snippets. Just copy the highlighted code snippets │
│ │(http://markup.su/highlighter/) ... hilite.me (http://hilite.me/) │and paste them in your favorite WYSIWYG (What-You-See-Is-What-You-Get) editor! │
│★★☆│Code Sharing: ... Ideone.com (https://ideone.com/) ... Pastebin.com │These tools generate semi-permanent pages for code sharing. Very useful especially when you're trying to get someone else to look│
│ │(https://pastebin.com/) ... Ubuntu Pastebin (https://paste.ubuntu.com/) │into your code. │
│★★☆│Ineffable (http://codeforces.com/blog/entry/19083) │A simple command-line grader for local grading. │
│★★☆│uDebug (https://www.udebug.com/) │A platform that provides expected outputs for user-specified inputs to problems on the UVa Online Judge. Some problems also │
│ │ │provide additional test cases for debugging. │
Contest Preparation
│ ☆ │ Name │ Description │
├───┼──────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│polygon (https://polygon.codeforces.com/) │polygon provides a platform and a rich set of tools for professional contest preparation. ... An example: Validators with testlib.h - Codeforces │
│ │ │(http://codeforces.com/blog/entry/18426) │
│★★☆│Graph Editor (https://csacademy.com/app/graph_editor/)│A fantastic tool to create and visualize graphs. │
│★★☆│tcframe (https://github.com/ia-toki/tcframe) │A C++ framework for generating test cases of competitive programming problems. │
│★★★│Virtual Judge (vjudge) (http://vjudge.net) │Virtual Judge (vjudge) allows users to create virtual contests with problems from notable problem archives. │
│★★☆│BNU Online Judge (https://www.bnuoj.com/v3/) │BNU Online Judge also allows users to create virtual contests. │
│★★☆│Kattis (https://open.kattis.com/) │Kattis assists in contest preparation (E-mail them for assistance). │
Community
▐ Meet the god-like competitive programmers!
Learn helpful tips, tutorials and insights from these people :)
Blogs
│ Name (Handle) │ Blog Name │
├─────────────────────────────────────────┼─────────────────────────────────────────────────────────┤
│ │Codeforces blogs (http://codeforces.com/) │
│Petr Mitrichev (Petr) │Algorithms Weekly (https://petr-mitrichev.blogspot.com/) │
│Makoto Soejima (rng_58) │rng_58's blog (https://rng-58.blogspot.com) │
│Bruce Merry (bmerry) │Entropy always increases (http://blog.brucemerry.org.za/)│
│Przemysław Dębiak (Psyho) │Psyho's blog (http://psyho.gg/) │
│Anudeep Nekkanti (anudeep2011) │Namespace Anudeep ;) (https://blog.anudeep2011.com/) │
│vexorian (vexorian) │vexorian's blog (http://www.vexorian.com/) │
│Ashar Fuadi (fushar) │Fushar's blog (http://fusharblog.com/) │
│LiJie Chen (WJMZBMR) │WJMZBMR (Chinese) (http://wjmzbmr.com/) │
│Huang I-Wen (dreamoon) │小月的耍廢日誌 (Chinese) (http://dreamoon4.blogspot.com/)│
│Shiang-Yun Yang (morris1028) │Morris' Blog (Chinese) (http://morris821028.github.io/) │
│Yuhao Du (TooDifficuIt, TooSimple, xudyh)│xudyh (Chinese) (http://xudyh.github.io/) │
Youtube and Livestreams
│ Name (Handle) │ Link │
├──────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│Petr Mitrichev (Petr) │Youtube (https://www.youtube.com/channel/UCdmeooqNtlN7IhrKlq7hGDA) │
│Gate Lectures by Ravindrababu Ravula │Youtube (https://www.youtube.com/channel/UCJjC1hn78yZqTf0vdTC6wAQ) │
│Mostafa Saad Ibrahim (mostafa.saad.fci) │Competitive Programming Youtube (Arabic Speech-English Text) (https://www.youtube.com/user/nobody123497) │
│Tushar Roy │Youtube (https://www.youtube.com/user/tusharroy2525), with many tutorial videos. │
│GeeksforGeeks │Youtube (https://www.youtube.com/channel/UC0RhatS1pyxInC00YKjjBqQ) │
│Algorithms Live! │Youtube (https://www.youtube.com/channel/UCBLr7ISa_YDy5qeATupf26w) │
│CodeChef │Youtube (https://www.youtube.com/user/codechefofficial/featured) │
│HackerRank │Youtube (https://www.youtube.com/channel/UCOf7UPMHBjAavgD0Qw5q5ww/videos) │
│IDeserve │Youtube (https://www.youtube.com/channel/UCMNkvKnD3mo3Jj9eTwJllWw/featured) │
│code_report │Youtube (https://www.youtube.com/channel/UC1kBxkk2bcG78YBX7LMl9pQ), with contest updates and problem tutorials of HackerRank, LeetCode, Topcoder and Codeforces. │
│"Sothe" the Algorithm Wolf │Youtube (https://www.youtube.com/channel/UCwsapfci2p1oDVO4Q2sJOQw) │
│Egor Kulikov (Egor) │Youtube (https://www.youtube.com/channel/UCjlLfxSPkYluCDetlwbLpjQ) │
│Adam Bardashevich (subscriber) │Youtube (https://www.youtube.com/channel/UCc4jWVeWjUfpUo8z4PHfopw) │
│Bohdan Pryshchenko (I_love_Tanya_Romanova)│Twitch (https://www.twitch.tv/lebron_stream), Youtube (https://www.youtube.com/channel/UCWqqnonyL7aVeUYl5Yp8TrQ) │
│Vladimir Smykalov (enot.1.10) │Twitch (https://www.twitch.tv/enot110), Youtube (https://www.youtube.com/channel/UCWEVsnIXiD5mgWM0LFwZBzA) │
│Aleksandar Abas (Alex7) │Youtube (https://www.youtube.com/channel/UCQ5k0-BMFhfvfJQik1r5ZVw) │
│Mikhail Tikhomirov (Endagorion) │Youtube (https://www.youtube.com/user/Endagorion/) │
│Kamil Debowski (Errichto) │Youtube (https://www.youtube.com/channel/UCBr_Fu6q9iHYQCh13jmpbrg) │
│David Harmeyer (SecondThread) │Youtube (https://www.youtube.com/channel/UCXbCohpE9IoVQUD2Ifg1d1g), Editorials, High qualtiy lectures(advanced topics) │
│mycodeschool │Youtube (https://www.youtube.com/user/mycodeschool), High quality videos on basic programming, data structures and algorithms │
│William Lin (tmwilliamlin168) │Youtube (https://www.youtube.com/channel/UCKuDLsO0Wwef53qdHPjbU2Q), Mostly streams, tips but inspiring and sometimes insightful │
│CodeNCode (kazama460) │Youtube (https://www.youtube.com/channel/UC0zvY3yIBQTrSutsV-4yscQ), Short lectures covering various CP related topics like Graph Theory, Number theory, DP, Advanced │
│ │Data structures. │
│Colin Galen (galen_colin) │Youtube (https://www.youtube.com/channel/UCpvS3EykHW--l0ogUhMEjEw), Editorials, screencasts │
│William Feset │Youtube (https://www.youtube.com/user/purpongie), High quality videos covering almost all data structures, algorithms │
Quora
▐ Visit Competitive Programming - Quora (https://www.quora.com/topic/Competitive-Programming) (Top 10 Most Viewed Writers (https://www.quora.com/topic/Competitive-Programming/writers)).
│ Important Community Figures │ Description │
├──────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│Bill Poucher (https://www.quora.com/profile/Bill-Poucher) │Executive Director of ACM-ICPC (https://icpc.baylor.edu). CS Professor at Baylor University. │
│Michal Forišek (misof) (https://www.quora.com/profile/Michal-Fori%C5%A1ek)│Organizer of IPSC (https://ipsc.ksp.sk) and IOI (https://ioinformatics.org/). CS Teacher at Comenius University in Slovakia. Algorithm│
│ │and CS Education Researcher. Former highly-rated competitive programmer. │
│Ahmed Aly (ahmed_aly) (https://www.quora.com/profile/Ahmed-Aly) │Founder of A2OJ (https://www.quora.com/profile/Ahmed-Aly). HackerRank (https://www.hackerrank.com) Lead Software Engineer. Former │
│ │member of the Google Code Jam (https://code.google.com/codejam/) team. │
│ Competitive Programmers │ │ │
├─────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┤
│Thanh Trung Nguyen (I_love_Hoang_Yen) │Brian Bi (bbi5291) (https://www.quora.com/profile/Brian-Bi)│Jonathan Paulson (jonathanpaulson) │
│ (https://www.quora.com/profile/Thanh-Trung-Nguyen) │ │ (https://www.quora.com/profile/Jonathan-Paulson) │
│Miguel Oliveira (mogers) │Egor Suvorov (yeputons) │Michal Danilák (Mimino) (https://www.quora.com/profile/Michal-Danil%C3%A1k) │
│ (https://www.quora.com/profile/Miguel-Oliveira-2) │ (https://www.quora.com/profile/Egor-Suvorov) │ │
│Bohdan Pryshchenko (I_love_Tanya_Romanova) │Vladimir Novakovski (vnovakovski) │Nick Wu (xiaowuc1) (https://www.quora.com/profile/Nick-Wu-4) │
│ (https://www.quora.com/profile/Bohdan-Pryshchenko) │ (https://www.quora.com/profile/Vladimir-Novakovski) │ │
│Cosmin Negruseri (https://www.quora.com/profile/Cosmin-Negruseri) │Lalit Kundu (darkshadows) │Ashish Kedia (ashish1294) (https://www.quora.com/profile/Ashish-Kedia) │
│ │ (https://www.quora.com/profile/Lalit-Kundu) │ │
│Johnny Ho (random.johnnyh) (https://www.quora.com/profile/Johnny-Ho) │Joshua Pan (lonerz) │Anudeep Nekkanti (anudeep2011) (https://www.quora.com/profile/Anudeep-Nekkanti)│
│ │ (https://www.quora.com/profile/Joshua-Pan-1) │ │
│Steven Hao (stevenkplus) (https://www.quora.com/profile/Steven-Hao) │Raziman T.V. (razimantv) │ │
│ │ (https://www.quora.com/profile/Raziman-T-V) │ │
Other Awesome Resources
Articles
▐ Informative and helpful articles
│ Subject │
├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│Overview of Programming Contests (http://psyho.gg/overview-of-programming-contests/), by Przemysław Dębiak (Psyho) │
│The 'science' of training in competitive programming - Codeforces (http://codeforces.com/blog/entry/17842), by Thanh Trung Nguyen (I_love_Hoang_Yen) │
│If you ask me how to improve your algorithm competition skill, I will give you the link of this blog. - Codeforces (http://codeforces.com/blog/entry/16599), by Huang I-Wen (dreamoon) │
│How to prepare for ACM - ICPC? - GeeksforGeeks (http://www.geeksforgeeks.org/how-to-prepare-for-acm-icpc/), by Vishwesh Shrimali │
│Complete reference to competitive programming - HackerEarth (https://www.hackerearth.com/getstarted-competitive-programming/), by Ravi Ojha │
│Getting started with the sport of competitive programming - HackerEarth (https://www.hackerearth.com/practice/notes/getting-started-with-the-sport-of-programming/), by Triveni Mahatha│
FAQs
▐ Fine answers to frequently-asked questions
│ Question │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│How do I start competitive programming? - Quora (https://www.quora.com/How-do-I-start-competitive-programming-5) │
│How can I become good at competitive programming? - Quora │
│(https://www.quora.com/How-can-I-become-good-at-competitive-programming-Are-there-any-courses-that-will-take-me-one-step-forward-before-I-start-doing-SPOJ-or-TopCoder-problems) ... What is the best strategy to│
│improve my skills in competitive programming in 2-3 months? - Quora (https://www.quora.com/What-is-the-best-strategy-to-improve-my-skills-in-competitive-programming-in-2-3-months) ... What is a good 6 month │
│plan to start and progress through competitive programming? - Quora (https://www.quora.com/What-is-a-good-6-month-plan-to-start-and-progress-through-competitive-programming) │
│How is competitive programming different from real-life programming? - Quora (https://www.quora.com/How-is-competitive-programming-different-from-real-life-programming) │
│What have you gained from competitive programming? - Quora (https://www.quora.com/What-have-you-gained-from-competitive-programming) │
Awesome Lists
▐ Relevant awesome lists
│ Name │ Link │
├───────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│C++ Books │The Definitive C++ Book Guide and List - Stack Overflow (https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)│
│Java Books │What are the best books to learn Java? - Quora (https://www.quora.com/What-are-the-best-books-to-learn-Java) │
│Advanced Java Books │What is the best book for advanced Java programming? - Quora (https://www.quora.com/What-is-the-best-book-for-advanced-Java-programming) │
│Algorithms │tayllan/awesome-algorithms (https://github.com/tayllan/awesome-algorithms) │
│Algorithm Visualization │enjalot/algovis (https://github.com/enjalot/algovis) │
│Math │rossant/awesome-math (https://github.com/rossant/awesome-math) │
│C++ │fffaraz/awesome-cpp (https://github.com/fffaraz/awesome-cpp) │
│Java │akullpp/awesome-java (https://github.com/akullpp/awesome-java) │
│Courses │prakhar1989/awesome-courses (https://github.com/prakhar1989/awesome-courses) │
│Free Programming Books │vhf/free-programming-books (https://github.com/EbookFoundation/free-programming-books) │
│Community-curated C++ Resources│Hackr.io (https://hackr.io/tutorials/learn-c-plus-plus) │
Interview Questions
│ Name │ Description │
├───────────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│CareerCup (https://www.careercup.com) │The most popular website for software engineering interview preparation. │
│InterviewBit (https://www.interviewbit.com) │Features intriguing and refreshing game-play designs which are designed to invoke one's interest in practicing.│
│Awesome Interviews (https://github.com/MaximAbramchuck/awesome-interview-questions)│A curated list of awesome interview questions │
│LeetCode (https://leetcode.com) │Well-organized website for software engineering interview preparation with best explanined solutions. │
License
!Creative Commons Attribution 4.0 International (https://i.creativecommons.org/l/by/4.0/88x31.png) (https://creativecommons.org/licenses/by/4.0/)
Awesome Competitive Programming is licensed under a Creative Commons Attribution 4.0 International License (https://creativecommons.org/licenses/by/4.0/).
A curated list of awesome Competitive Programming, Algorithm and Data Structure resources.
Created with a view to connecting people to information, this list below contains a complete collection of all the fantastic resources I've collected over the course of my 11-year competitive programming career.
I hope you'll find it useful :)
What is competitive programming? - Quora (https://www.quora.com/What-is-competitive-programming-2)
Contributing
Please kindly follow CONTRIBUTING.md (CONTRIBUTING.md) to get started.
You can also contribute by sharing!
Share the list with your classmates, your friends and everyone :)
▐ By connecting more people to information,
▐ You, are doing not me, but everyone a HUGE favor!
▐
▐ I really hope that more people can benefit from this list :)
Table of Contents
⟡ List of Lists (#list-of-lists)
⟡ Syllabuses (#syllabuses)
⟡ Tutorial Websites (#tutorial-websites)
⟡ Open Courses (#open-courses)
* **Open Courses for Algorithms and Data Structures** (#open-courses-for-algorithms-and-data-structures)
⟡ Books (#books)
* **Books for Algorithms** (#books-for-algorithms) | **Books for Mathematics** (#books-for-mathematics)
⟡ Sites for Practice (#sites-for-practice)
* **Problem Classifiers** (#problem-classifiers) | **Contest Calendars** (#contest-calendars)
⟡ Camps and Trainings (#camps-and-trainings)
⟡ Sites for Questions (#sites-for-questions)
⟡ Implementations (#implementations)
⟡ Language Specifics (#language-specifics)
* **C/C++** (#cc) | **Java** (#java) | **Miscellaneous** (#miscellaneous)
⟡ Tools (#tools)
* **IDEs** (#ides) | **Personal use** (#personal-use) | **Contest Preparation** (#contest-preparation)
⟡ Community (#community)
* **Blogs** (#blogs) | **Youtube and Livestreams** (#youtube-and-livestreams) | **Quora** (#quora)
⟡ Other Awesome Resources (#other-awesome-resources)
* **Articles** (#articles) | **FAQs** (#faqs) | **Awesome Lists** (#awesome-lists) | **Interview Questions** (#interview-questions)
⟡ License (#license)
List of Lists
▐ Awesome curated lists classified by topics.
│ ☆ │ Name │ Description │
├───┼───────────────────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│Good Blog Post Resources about Algorithm and Data Structures - Codeforces │A collection of fantastic tutorial blog posts written by Codeforces users. Some intriguing ones include │
│ │ (http://codeforces.com/blog/entry/13529) │Palindromic Trees, Policy Based Data Structures, and a lot more. │
│★★★│All of the good tutorials found on codeforces - Codeforces (http://codeforces.com/blog/entry/57282)│Another good collection of tutorial blog posts written by Codeforces users. │
│★★★│Data Structures and Algorithms - CodeChef Discuss │A very complete list of competitive programming resources. A must-have in your browser bookmark. │
│ │(https://www.quora.com/What-is-a-list-of-data-structures-that-a-competitive-programmer-must-know/an│ │
│ │swer/Sameer-Gulati-3) │ │
│★★★│How to prepare for ACM - ICPC? - GeeksforGeeks │A detailed walk-through of the preparations for ACM-ICPC. │
│ │ (https://www.geeksforgeeks.org/how-to-prepare-for-acm-icpc/) │ │
Syllabuses
▐ Find out what topics you need to learn.
│ ☆ │ Name │ Description │
├───┼───────────────────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│IOI Syllabus (https://people.ksp.sk/~misof/ioi-syllabus/) │A detailed syllabus on which IOI contestants will be tested. This is still somewhat relevant to ACM-ICPC.│
│★★★│How to prepare for ACM - ICPC? - GeeksforGeeks │A detailed walk-through of the preparations for ACM-ICPC. │
│ │ (https://www.geeksforgeeks.org/how-to-prepare-for-acm-icpc/) │ │
│★★☆│Programming Camp Syllabus │A list of important topics in competitive programming with exercise problems. │
│ │ (https://docs.google.com/document/d/1_dc3Ifg7Gg1LxhiqMMmE9UbTsXpdRiYh4pKILYG2eA4/edit) │ │
│★★☆│Juniors Training Sheet (https://goo.gl/unDETI), by Mostafa Saad Ibrahim │~800 ordered problems for newcomers to be good up to Div2-D │
│ │(https://sites.google.com/site/mostafasibrahim/) │ │
Tutorial Websites
▐ Awesome websites with great tutorials.
│ ☆ │ Name │ Description │
├───┼─────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│Topcoder Data Science Tutorials │A list of tutorials written by respected Topcoder members. Many top programmers started learning data sciences from here. │
│ │ (https://www.topcoder.com/community/data-science/data-science-tutorials/) │ │
│★★★│E-Maxx (Russian) (http://e-maxx.ru/algo/), (English) │A tutorial website widely used and referenced in the Russian-speaking competitive programming community. Most of the articles │
│ │(http://cp-algorithms.com/) │of the original site have been translated into English, Google Translate works okay for the remaining ones. │
│★★☆│Algorithms - GeeksforGeeks │A website with a large archive of nicely written articles on different topics. It is a great complimentary resource for │
│ │ (https://www.geeksforgeeks.org/fundamentals-of-algorithms/) │algorithm courses. │
│★★☆│PEGWiki (http://wcipeg.com/wiki/Special:AllPages) │A website with amazing in-depth wiki-like writeups on many topics. It's far better than those on Wikipedia in my opinion. │
│★★☆│Notes - HackerEarth (https://www.hackerearth.com/practice/notes/trending/) │A great crowdsourcing platform for tutorials. Also visit Code Monk (https://www.hackerearth.com/practice/codemonk/). │
│★★☆│USA Computing Olympiad (USACO) (http://www.usaco.org/) │Contains several training pages on its website which are designed to develop one's skills in programming solutions to difficult│
│ │ │and varied algorithmic problems at one's own pace. │
│★★☆│basecs (https://medium.com/basecs) │A blog with in-depth, illustrated tutorials on basic algorithms and data structures. │
│★★☆│Competitive Programming - Commonlounge │Short video tutorials for beginner and intermediate concepts. Advanced tutorials selected from the best ones available on │
│ │(https://www.commonlounge.com/discussion/d4a14f601eb44281b6c579e73d126cca/mai│various CP blogs. │
│ │n?r=acp) │ │
│★☆☆│OLYMPIADS IN INFORMATICS │An international journal focused on the research and practice of professionals who are working in the field of teaching and │
│ │ (https://www.mii.lt/olympiads_in_informatics/index.html) │learning informatics to talented student. │
│★☆☆│algolist (Russian) (http://algolist.manual.ru/) │A Russian website devoted to algorithms of all sorts. Some topics listed on this website seems pretty interesting. │
│★★☆│演算法筆記 (Algorithm Notes) (Chinese) (http://web.ntnu.edu.tw/~algo/) │One of the most popular tutorial websites among the Taiwanese competitive programming community. The maintainer for this │
│ │ │website spends immense efforts on researching algorithms. │
│★★☆│国家集训队论文 1999-2015 (Papers from Chinese IOI training camps) (Chinese) │Papers from the Chinese IOI training camps. It's interesting for the fact that one can tell different regions emphasize │
│ │ (http://download.csdn.net/album/detail/657/1/1) │different things. │
│★★★│Mini-Editorials (https://github.com/mostafa-saad/MyCompetitiveProgramming), │Solutions with mini-editorials for many problems, including UVA/SPOJ/IOI/Olympiad problems │
│ │by Mostafa Saad Ibrahim (https://sites.google.com/site/mostafasibrahim/) │ │
│ │trainees │ │
│★★☆│OI Wiki (Competitive Programming) (Chinese) (https://oi-wiki.org/) │OI Wiki is committed to being a free and open continuously updated programming competition (competitive programming) knowledge │
│ │ │integration site. This wiki is a sort of companion or guide for the competitive programmer who's trying to learn something │
Open Courses
▐ Consider beginning your competitive programming journey with these awesome courses!
│ ☆ │ Name │ Description │
├───┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────┤
│★★☆│Code Monk (https://www.hackerearth.com/practice/codemonk/), by HackerEarth │A fantastic step-by-step tutorial on the essential topics in competitive programming. │
│★★★│Stanford CS 97SI: Introduction to Competitive Programming Contests (http://web.stanford.edu/class/cs97si/) │Offers comprehensive lecture slides and a short list of exercise problems. │
│★★☆│How to Win Coding Competitions: Secrets of Champions │A course by ITMO University on competitive coding on edX. │
│ │ (https://www.edx.org/course/how-to-win-coding-competitions-secrets-of-champions-0) │ │
│★★☆│Codechef's Indian Programming Camp (https://www.youtube.com/playlist?list=PLi0ZM-RCX5nsTc2Z6woHr5qoF6n3b-thO)│Video Lectures from Codechef's Indian Programming Camp 2016 │
│ │ │(https://blog.codechef.com/2016/08/03/lectures-from-indian-coding-camp/). Lectures given by top│
│ │ │competitive programmers like Sergey Kulik, Kevin Charles Atienza and Anudeep Nekkanti. │
│ │ │Primarily focused on exploring these concepts by applying them to actual competitive contest │
│ │ │problems. │
│★★☆│Reykjavik T-414-ÁFLV: A Competitive Programming Course (https://algo.is/competitive-programming-course/) │An awesome course taught by Bjarki Ágúst Guðmundsson (SuprDewd) (https://algo.is). These │
│ │ │lectures feature neat slides and a nice list of problems to practice. │
│★★☆│NCTU DCP4631: Problem Solving and Programming Techniques │A course on basic topics featuring good lecture slides. │
│ │ (https://sites.google.com/site/mzshieh/courses/problem-solving-and-programming-techniques-spring-2014) │ │
│★☆☆│Materials (English) (https://github.com/mostafa-saad/ArabicCompetitiveProgramming) from Arabic Competitive │Some materials (slides & source codes) covering a broad range of algorithmic topics by Mostafa │
│ │Programming YouTube Channel (https://www.youtube.com/user/nobody123497) │Saad Ibrahim. │
Open Courses for Algorithms and Data Structures
│ ☆ │ Name │ Description │
├───┼──────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│prakhar1989/awesome-courses#algorithms │A fantastic list of open courses offered by notable institutions (MIT, Stanford, UC Berkeley ... etc.). │
│ │ (https://github.com/prakhar1989/awesome-courses#algorithms) │ │
│★★★│MIT SMA 5503: Introduction to Algorithms │Lectured by Prof. Charles Leiserson (one of the coauthors of Introduction to Algorithms) and Prof. Erik Demaine (a │
│ │(https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introd│brilliant professor who has made remarkable breakthroughs in data science), the course offers great materials, │
│ │uction-to-algorithms-sma-5503-fall-2005/) │accompanied by intuitive and comprehensive analyses. │
│★★☆│UIUC Algorithm Course (http://jeffe.cs.illinois.edu/teaching/algorithms/) │lecture notes, homeworks, exams, and discussion problems covering a broad range of algorithmic topics │
Books
▐ A list of recommended books for competitive programming.
│ ☆ │ Name │ Description │
├───┼───────────────────────────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★☆│Competitive Programming (https://cpbook.net/), by Steven and Felix Halim │This book contains a collection of relevant data structures, algorithms, and programming tips. │
│ │ │It's a well-received book. ... The first edition is free for download (pdf) │
│ │ │(http://www.comp.nus.edu.sg/~stevenha/myteaching/competitive_programming/cp1.pdf). │
│★★☆│Programming Challenges: The Programming Contest Training Manual │This book includes more than 100 programming challenges, as well as the theory and key concepts │
│ │(https://www.amazon.com/Programming-Challenges-Contest-Training-Computer/dp/0387001638), by Steven Skiena │necessary for approaching them. Problems are organized by topic, and supplemented by complete │
│ │and Miguel Revilla │tutorial material. │
│★★☆│Competitive Programmer's Handbook (https://cses.fi/book/index.html), by Antti Laaksonen │An introduction to competitive programming for aspiring IOI and ICPC contestants. Free to │
│ │ │download (pdf) (https://cses.fi/book/book.pdf). │
│★★☆│Algorithmic Thinking: A Problem-Based Introduction │A book that teaches data structures and algorithms using competitive programming problems (IOI, │
│ │ (https://nostarch.com/algorithmic-thinking), by Daniel Zingaro │USACO, CCC/CCO, etc.). │
│★★☆│Computational Geometry: Algorithms and Applications │This is a well-written book which covers a broad range of computational geometry problems. │
│ │(https://www.amazon.com/Computational-Geometry-Applications-Mark-Berg/dp/3540779736), by Mark de Berg, │ │
│ │Otfried Cheong, Marc van Kreveld, Mark Overmars │ │
│★☆☆│The Hitchhiker’s Guide to the Programming Contests │This book is free for download (pdf) (http://comscigate.com/Books/contests/icpc.pdf). This book │
│ │ (http://comscigate.com/Books/contests/icpc.pdf), by Nite Nimajneb │covers various topics relevant to competitive programming. │
│★★★│プログラミングコンテストチャレンジブック (Japanese) (http://goo.gl/M4yfbr), by 秋葉拓哉, 岩田陽一, 北川宜稔│An absolutely phenomenal book. The contents, organized in a very coherent manner, are nothing │
│ │ │short of amazing. ... 培養與鍛鍊程式設計的邏輯腦:世界級程式設計大賽的知識、心得與解題分享 │
│ │ │(Chinese Traditional) │
│★★☆│算法竞赛入门经典 (Chinese) (http://www.tup.com.cn/booksCenter/book_05568701.html), by 刘汝佳 │The Art of Algorithms and Programming Contests (English), │
│ │ │打下好基礎:程式設計與演算法競賽入門經典 (Chinese Traditional) │
│★★☆│算法竞赛入门经典——训练指南 (Chinese) │提升程式設計的解題思考力─國際演算法程式設計競賽訓練指南 (Chinese Traditional) │
│ │ (https://www.amazon.cn/算法竞赛入门经典-训练指南-刘汝佳/dp/B009SJJGOU), by 刘汝佳, 陈锋 │ │
│★★★│算法艺术与信息学竞赛 (Chinese) (http://goo.gl/O1tr8v), by 刘汝佳, 黄亮 │An old-time classic. It's old but the contents in this book are still considered to be very │
│ │ │difficult by today's standards. │
Books for Algorithms
│ ☆ │ Name │ Description │
├───┼────────────────────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│Introduction to Algorithms (https://mitpress.mit.edu/books/introduction-algorithms), by Thomas H. │Also known as CLRS (taken from name initials), this book is often referred to as the "bible" for │
│ │Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein │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 (http://amzn.to/VjhioK), 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 (http://www.cs.princeton.edu/~wayne/kleinberg-tardos/). │
│★★☆│The Algorithm Design Manual │The book is written in more readable text. Some find it comprehensive than other books. You can also │
│ │ (https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693), by Steven S. Skiena │find some good resources (including the author's own video lectures) on its official website │
│ │ │(http://www.algorist.com). │
│★★★│Algorithms (https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X), by Robert │This book is neatly categorized, coupled with elaborate explanations and fantastic illustrations. It is │
│ │Sedgewick and Kevin Wayne │used in some IOI training camps as a textbook. │
│ │Algorithms and Data Structures in Action │This book provides a different approach to algorithms, balancing theory with a more practical angle, │
│ │ (https://www.manning.com/books/algorithms-and-data-structures-in-action), by Marcello La Rocca │with a section per-chapter focusing on how to apply algorithms to real-world use cases that can be found│
│ │ │in your daily work, or in competitive programming; it also presents a blend of classic, advanced, and │
│ │ │new algorithms. │
│★★★│Algorithms (https://jeffe.cs.illinois.edu/teaching/algorithms/), by Jeff Erickson │A free electronic version of a self-published textbook licensed under CC by 4.0. This is a well written │
│ │ │book from lecture notes of theoretical computer science courses at the University of Illinois. Covers │
│ │ │the main paradigms of backtracking, dynamic programming, greedy, and particularly graphs in depth. │
Books for Mathematics
│ ☆ │ Name │ Description │
├───┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────┤
│★★☆│Discrete Mathematics and Its Applications │Discrete Mathematics is closely relevant to competitive │
│ │ (https://www.amazon.com/Discrete-Mathematics-Applications-Kenneth-Rosen/dp/0072899050), by Kenneth H. Rosen │programming. This book provides comprehensive materials on│
│ │ │a wide range of topics including: Logics and Proofs, Sets,│
│ │ │Functions, Sequences, Matrices, Number Theory, Recursion, │
│ │ │Counting, Probability, Graphs, Trees and Boolean Alegra to│
│ │ │name but a few. │
│★★☆│Concrete Mathematics: A Foundation for Computer Science │The book offers a deeper insight into Discrete Mathematics│
│ │ (https://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025), by Ronald L. Graham, Donald E. Knuth, Oren Patashnik │with more emphases on number-related topics. │
│★★☆│Linear Algebra and Its Applications │The book does a brilliant job at bridging the gap between │
│ │(https://www.amazon.com/Linear-Algebra-Its-Applications-5th/dp/032198238X/ref=sr_1_1?ie=UTF8&qid=1455475253&sr=8-1&keywords=Linear+Algebra+and+Its│a physical system (for scientists and engineers) and an │
│ │+Applications), by David C. Lay, Steven R. Lay, Judi J. McDonald │abstract system (for mathematicians). │
│★★☆│Introduction to Probability │This is a well-written introductory probabilities book. │
│ │ (http://www.dartmouth.edu/~chance/teaching_aids/books_articles/probability_book/book.html), by Charles M. Grinstead, J. Laurie Snell │... It's free for download (pdf) │
│ │ │(http://www.dartmouth.edu/~chance/teaching_aids/books_arti│
│ │ │cles/probability_book/amsbook.mac.pdf) (released under GNU│
│ │ │Free Documentation License). │
│★★☆│How to Solve It: A New Aspect of Mathematical Method (https://www.amazon.com/How-Solve-It-Mathematical-Princeton/dp/069111966X), by G. Polya │An old-time classic. In this book, the author provides a │
│ │ │systematic way to solve problems creatively. │
│★★☆│Intermediate Counting & Probability (https://artofproblemsolving.com/store/item/intermediate-counting), by David Patrick │Topics in counting and probability byformer USA │
│ │ │Mathematical Olympiad winner David Patrick , topics │
│ │ │include inclusion-exclusion, 1-1 correspondences, the │
│ │ │Pigeonhole Principle, constructive expectation, Fibonacci │
│ │ │and Catalan numbers, recursion, conditional probability, │
│ │ │generating functions, graph theory, and much more.. │
Sites for Practice
▐ Good online judge systems / contest platforms to practice.
│ ☆ │ Name │ Description │
├───┼─────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│Codeforces (http://codeforces.com/) │Codeforces is one of, if not, the most popular contest platforms out there. Currently maintained by Saratov State University, it features regular contests and │
│ │ │countless awesome original problems. Additionally, every contest provides immediate helpful tutorials (usually) written by the authors themselves. Codeforces also │
│ │ │houses a strong and engaging community. All in all, one would indeed learn and improve tremendously here. │
│★★★│Topcoder (https://www.topcoder.com/) │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 and Topcoder therefore appeals to many elite │
│ │ │programmers. 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 │
│ │ (https://code.google.com/codejam/) │in a fixed amount of time. Competitors may use any programming language and development environment to obtain their solutions. │
│★★★│AtCoder (https://atcoder.jp) │AtCoder is a new but phenomenal contest platform created by a team of highly-rated Japanese competitive programmers. │
│★★☆│CodeChef (https://www.codechef.com/) │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 (https://www.spoj.com/) │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 (#problem-classifiers) section). SPOJ also allows │
│ │ │advanced users to organize contests under their own rules. │
│★★☆│Timus (http://acm.timus.ru/) │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. │
│★☆☆│HDU (http://acm.hdu.edu.cn/) │HDU is an online judge maintained by Hangzhou Dianzi University. It's home to many classic problems from the Chinese IOI scene. │
│★★☆│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. │
│ │(http://judge.u-aizu.ac.jp/onlinejudg│ │
│ │e/index.jsp) │ │
│★★☆│UVa (https://uva.onlinejudge.org/) │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 (https://uhunt.onlinejudge.org/id/0) 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 │
│ │ (https://www.hackerrank.com) │variety of programming languages and span multiple computer science domains. │
│★★☆│POJ (http://poj.org/) │POJ is an online judge with many great problems maintained by Peking University. Most Chinese competitive programmers began their journey here. The platform is really │
│ │ │dated so mysterious compilation and run-time issues may occur. │
│★★☆│Project Euler │Project Euler features a stunning set of good math problems. It also hosts a forum where people can discuss. │
│ │ (https://projecteuler.net/) │ │
│★☆☆│Hackerearth │HackerEarth is a startup technology company based in Bangalore, India that provides recruitment solutions. │
│ │ (https://www.hackerearth.com/) │ │
│★☆☆│Caribbean Online Judge │COJ is hosted by University of Informatics Sciences (UCI, by its acronym in Spanish), located in Cuba. Feature ACM ICPC and Progressive contest styles, mostly from │
│ │ (http://coj.uci.cu/index.xhtml) │Caribbean and Latin American problem setters, also has problem classifier and contest calendar. │
│★★☆│CS Academy (https://csacademy.com) │New in the competitive programming scene, CS Academy is a growing online judge that hosts competitions once every two weeks. It supports live chat, interactive lessons│
│ │ │and an integrated online editor (that actually works). │
│★★☆│Russian Code Cup │Programming competitions powered by Mail.Ru Group. Competition consists of 3 qualification, 1 elimination and 1 final rounds. For each round contestants are given 4-8 │
│ │ (https://www.russiancodecup.ru/en/) │problems which must be solved in a fixed amount of time. │
│★★☆│CodeFights (https://codesignal.com/) │CodeFights is a website for competitive programming practice and interview preparation. It features daily challenges of varying difficulty, an archive of problems and │
│ │ │regular (every 15 minutes) mini-tournaments. Good for beginners. │
│★★☆│OmegaUp │OmegaUp is a community-based website for competitive programing training. It's also where Mexican Olympiad in Informatics (OMI : Olimpiada Mexicana de Informática) is │
│ │ (https://omegaup.com/) (Spanish) │hosted. │
Problem Classifiers
▐ Sites classifying programming problems.
Choose a category (eg. DP) of interest and practice problems on that topic.
│ ☆ │ Name │ Description │
├───┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────┤
│★★★│A2 Online Judge (https://a2oj.com/Categories.jsp) │Mixed │
│★★★│Problem Classifier (http://problemclassifier.appspot.com/) │SPOJ │
│★★☆│UVa Online Judge (https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8) │CP Book │
│★☆☆│Codeforces Tags (http://codeforces.com/problemset?tags=dp) │CF (DP) │
│★★☆│HackerRank (https://www.hackerrank.com/domains/algorithms?filters%5Bsubdomains%5D%5B%5D=warmup) │HackerRank │
│★★☆│Juniors Training Sheet (https://goo.gl/unDETI), by Mostafa Saad Ibrahim (https://sites.google.com/site/mostafasibrahim/)│~800 ordered problems for newcomers to be good up to Div2-D│
│★★☆│Lucky貓的 UVA(ACM)園地 (Chinese) (http://luckycat.kshs.kh.edu.tw/) │UVa │
│★★☆│Topcoder problem archive (https://community.topcoder.com/tc?module=ProblemArchive) │List of problems with categories and complexity levels │
Contest Calendars
▐ Calendars for impending programming contests.
(Never miss another contest!)
│ ☆ │ Name │ Description │
├───┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────┤
│★★★│Programming Contest Calendar - HackerRank (https://www.hackerrank.com/calendar) │Google Calendar export available│
│★★☆│clist.by (https://clist.by/) │API available for use │
│★★☆│Coding Calendar (Android App) (https://play.google.com/store/apps/details?id=com.limitskyapps.CodingCalendar) │ │
│★★☆│Coder's Calendar (https://github.com/nishanthvijayan/CoderCalendar): Android App (https://play.google.com/store/apps/details?id=com.corphots.coderscalendar), Chrome │ │
│ │Extension (https://chrome.google.com/webstore/detail/coders-calendar/bageaffklfkikjigoclfgengklfnidll), Firefox Add-on │ │
│ │(https://addons.mozilla.org/en-US/firefox/addon/coder-calendar/) │ │
│★★★│CodeHorizon (http://codehorizon.star-lord.me/): iOS App (https://itunes.apple.com/in/app/codehorizon/id925056167?mt=8), Android App │ │
│ │(https://play.google.com/store/apps/details?id=com.chintanghate.CodeHorizon) │ │
│★★★│Competitive Programming Contests Calendar (https://competitiveprogramming.info/calendar) │Google Calendar export available│
Sites for Questions
▐ These are great sites to ask questions.
Paste your codes at ideone (https://ideone.com/), pastebin (https://pastebin.com/) or other sites to avoid formatting issues.
│ ☆ │ Name │ Description │
├───┼─────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│Codeforces (http://codeforces.com/) │For quick answers, Codeforces is definitely the go-to place to ask about anything competition-related. │
│★★★│Competitive Programming - Quora (https://www.quora.com/topic/Competitive-Programming)│You would typically get more elaborate answers on Quora, but you might not have your questions answered straightaway.│
│★★☆│Theoretical Computer Science Stack Exchange (https://cstheory.stackexchange.com/) │This place is generally for the academics, so don't ask questions about contest problems here. │
Camps and Trainings
▐ Online Trainings and Camps.
│ ☆ │ Name │ Description │
├───┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────┤
│★★★│Online Free Problem-Solving Coaching (https://codeforces.com/blog/mostafa.saad.fci), by Mostafa Saad Ibrahim │See the coaching details and people comments on its nature/quality.│
│ │(https://sites.google.com/site/mostafasibrahim/) │ │
Implementations
▐ Algorithm & Data structure implementations.
│ ☆ │ Name │ Description │
├───┼──────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│CodeLibrary (http://code-library.herokuapp.com/), by Andrey Naumenko (indy256) │CodeLibrary contains a large collection of implementations for algorithms and data structures in Java │
│ │ │and C++. You may also visit his GitHub Repository (https://github.com/indy256/codelibrary). │
│★★★│spaghetti-source/algorithm │High-quality implementations of many hard algorithms and data structures. │
│ │ (https://github.com/spaghetti-source/algorithm), by Takanori MAEHARA (@tmaehara) │ │
│★★★│kth-competitive-programming/kactl │A phenomenally organized, documented and tested team notebook from KTH Royal Institute of Technology. │
│ │ (https://github.com/kth-competitive-programming/kactl), by Simon Lindholm (simonlindholm) et al. │One of the most well-crafted team notebooks (contest libraries) I've ever seen. │
│★★☆│jaehyunp/stanfordacm (https://github.com/jaehyunp/stanfordacm) │Stanford's team notebook is well maintained and the codes within are of high-quality. │
│★★☆│ngthanhtrung23/ACM_Notebook_new (https://github.com/ngthanhtrung23/ACM_Notebook_new), by team RR │RR Watameda represented National University of Singapore for the 2016 ACM-ICPC World Finals. The items│
│ │Watameda (I_love_Hoang_Yen, flashmt, nguyenhungtam) from National University of Singapore │in this notebook are pretty standard and well-organized. │
│★★☆│bobogei81123/bcw_codebook (https://github.com/bobogei81123/bcw_codebook), by team bcw0x1bd2 (darkhh, │bcw0x1bd2 represented National Taiwan University for the 2016 ACM-ICPC World Finals. This notebook │
│ │bobogei81123, step5) from National Taiwan University │contains robust implementations for advanced data structures and algorithms. │
│★☆☆│foreverbell/acm-icpc-cheat-sheet │A notebook with some advanced data structures and algorithms including some from the China informatics│
│ │ (https://github.com/foreverbell/acm-icpc-cheat-sheet), by foreverbell (foreverbell) │scene. │
│★☆☆│igor's code archive (http://shygypsy.com/tools/), 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
▐ Languages and other miscellaneous knowledge.
C/C++
│ ☆ │ Name │ Description │
├───┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┤
│★★☆│Power up C++ with the Standard Template Library - Topcoder: Part 1 │An introductory tutorial on basic C++ STLs. │
│ │(https://www.topcoder.com/community/data-science/data-science-tutorials/power-up-c-with-the-standard-template-library-part-1/), │ │
│ │Part 2 │ │
│ │(https://www.topcoder.com/community/data-science/data-science-tutorials/power-up-c-with-the-standard-template-library-part-2/) │ │
│★★☆│Yet again on C++ input/output - Codeforces (http://codeforces.com/blog/entry/5217) │Learn more about C++ I/O optimizations. │
│★★☆│C++ Tricks - Codeforces (http://codeforces.com/blog/entry/15643) ... What are some cool C++ tricks to use in a programming │Plentiful C++ tricks for competitive programming. Note that some should be │
│ │contest? - Quora (https://www.quora.com/Competitive-Programming/What-are-some-cool-C++-tricks-to-use-in-a-programming-contest) │used with care. │
│★★★│C++ STL: Policy based data structures - Codeforces: Part 1 (http://codeforces.com/blog/entry/11080), Part 2 │Detailed introduction to the extra data structures implemented in GNU C++. │
│ │(http://codeforces.com/blog/entry/13279) │The official documentation can be found here │
│ │ │(https://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/). │
│★☆☆│C++11 FAQ (English, Chinese, Russian, Japanese, Korean) (http://www.stroustrup.com/C++11FAQ.html) │A list of FAQs regarding C++11 collected and written by Bjarne Stroustrup, │
│ │ │the creator of C++. │
Java
│ ☆ │ Name │ Description │
├───┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────┤
│★★☆│How to read input in Java — tutorial - Codeforces (http://codeforces.com/blog/entry/7018) │Learn how to read input faster. This is a must-read for those who intend to use Java for │
│ │ │competitive programming │
│★★☆│How to sort arrays in Java and avoid TLE - Codeforces (http://codeforces.com/blog/entry/7108) │Some tips on how to avoid hitting the worst case of quick sort │
│★★☆│BigNum arithmetic in Java — Let's outperform BigInteger! - Codeforces (http://codeforces.com/blog/entry/17235)│A basic but faster custom BigInteger class │
│★★☆│EZ Collections, EZ Life (new Java library for contests) - Codeforces (http://codeforces.com/blog/entry/14328) │A Java library for contests written by Alexey Dergunov (dalex). ArrayList, ArrayDeque, Heap, │
│ │ │Sort, HashSet, HashMap, TreeSet, TreeMap, TreeList and pair classes are implemented │
Miscellaneous
│ ☆ │ Name │ Description │
├───┼───────────────────────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│Bit Twiddling Hacks (https://graphics.stanford.edu/~seander/bithacks.html) │A huge compiled list of bit manipulation tricks. │
│★★★│Comparing Floating Point Numbers, 2012 Edition - Random ASCII │Everything you need to know about floating point numbers. A must read especially for geometry topics.│
│ │ (https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/) │ │
│★★☆│Object-Oriented C Style Languages: C++, Objective-C, Java, C# - a side-by-side reference sheet │A detailed side-by-side reference sheet for common syntaxes. │
│ │ (http://hyperpolyglot.org/cpp) │ │
Tools
▐ Awesome tools that will make your life easier.
IDEs
│ ☆ │ Name │ Platform │ Description │
├───┼──────────────────────────────────────────┼─────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│Vim (https://www.vim.org/download.php) │CLI / │Vim is one of the most popular text editors among advanced programmers. It allows text-editing to be done very efficiently with solely │
│ │ │Cross-Platform │keystrokes. Vim is also highly configurable, extensible and integrates with shells (command lines) really well. The only setback about Vim is │
│ │ │ │that it has a high learning curve for beginners. │
│★★★│Emacs │CLI / │Emacs is another popular text editor (or development environment to be more precise). The debate on "Vim vs. Emacs" is constantly brought up due│
│ │(https://www.gnu.org/software/emacs/downlo│Cross-Platform │to their popularity. Basically Emacs is more than just a text editor. It has plugins like file managers, web browsers, mail clients and news │
│ │ad.html) │ │clients that allows users to performs these tasks directly inside Emacs. Emacs is "heavier" because of this, but it arguably has a relatively │
│ │ │ │easier learning curve for beginners. │
│★★★│Far Manager │Hybrid / Windows │Far Manager is the most widely-used editor in the RU/CIS competitive programming community. It's actually a file manager in its bare bones, but │
│ │(https://www.farmanager.com/download.php?l│ │you can install FarColorer (http://colorer.sourceforge.net/farplugin.html) - a syntax highlighter plugin to program on it. Properly configured, │
│ │=en) │ │Far Manager allows you to navigate between files very efficiently while writing your codes. │
│★★★│Code::Blocks │GUI / │Code::Blocks is the go-to IDE for C/C++. It's a full-fledged, versatile IDE with numerous great features. Code::Blocks is usually provided along│
│ │ (http://codeblocks.org/downloads) │Cross-Platform │with Vim in programming contests. │
│★★★│IntelliJ IDEA │GUI / │IntelliJ IDEA is certainly one of the best IDEs for Java. It's used by most competitive programmers who use Java as their main language. Be sure│
│ │(https://www.jetbrains.com/idea/#chooseYou│Cross-Platform │to check out CHelper (https://plugins.jetbrains.com/plugin/7091-chelper), a very handy plugin written for programming contests. │
│ │rEdition) │ │ │
│★★☆│Sublime Text │GUI / │Sublime Text is an extraordinary text editor. Packed with powerful and innovative features like Multiple Carets, Minimaps and Command Palletes, │
│ │ (https://www.sublimetext.com/3) │Cross-Platform │it attracts a strong and engaging community. Sublime Text is highly extensible, so be sure to have Package Control (https://packagecontrol.io/) │
│ │ │ │installed and explore perhaps one of the largest catalogue of plugins! │
│★★☆│Eclipse │GUI / │Eclipse is another good IDE for Java. It's an okay alternative to Intellij IDEA (A tad inferior to IDEA by today's standards). Sometimes │
│ │ (https://www.eclipse.org/downloads/) │Cross-Platform │contests only provide Eclipse for some reason, so this might be a good incentive to try and use Eclipse. │
│★★☆│CLion │GUI / │CLion, produced by JetBrains - the same company who made Intellij IDEA, is a powerful IDE for C++. Free educational licenses are available OR │
│ │(https://www.jetbrains.com/clion/download/│Cross-Platform │you can try out their EAP (Early Access Program) (https://confluence.jetbrains.com/display/CLION/Early+Access+Program) which is still free as of│
│ │) │ │Apr, 2018. You may want to turn off its code inspection feature as it will cause quite a bit of lag. │
│★☆☆│Other IDEs │Mixed │Visual Studio (https://visualstudio.microsoft.com/vs/community/) is the IDE to use in case you want to code in C#. ... Both Atom │
│ │ │ │(https://atom.io/) and Visual Studio Code (https://code.visualstudio.com/) are built with Electron (written in JavaScript) and therefore │
│ │ │ │somewhat resource-hogging. ... CodeLite (https://codelite.org/) is a newly rising IDE. Beware that the load-up and project-creation times can be│
│ │ │ │extraordinary. │
Personal use
│ ☆ │ Name │ Description │
├───┼───────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│VisuAlgo (https://visualgo.net/en) │A website featuring a large collection of visualization tools for algorithms and data structures. │
│★★★│General Practice Helpers: ... CHelper │Great tools that parse contests, inline library codes and provide testing frameworks. They save you from spending your precious │
│ │(https://plugins.jetbrains.com/plugin/7091-chelper) (IntelliJ IDEA) (manual│time on switching windows and copy-pasting back and forth. │
│ │(http://codeforces.com/blog/entry/3273)) ... caide │ │
│ │(https://github.com/slycelote/caide) (Visual Studio, CodeLite, standalone │ │
│ │command line app) ... JHelper (http://codeforces.com/blog/entry/13369) │ │
│ │(AppCode, CLion) online-judge-tools │ │
│ │(https://github.com/kmyk/online-judge-tools) (Stand alone CLI tool, It is │ │
│ │actively maintained.) │ │
│★★☆│Codeforces Parsers: ... Codeforces Parser │These tools parse Codeforces contest problems and help run sample tests. │
│ │(https://github.com/johnathan79717/codeforces-parser) ... GoCF │ │
│ │(https://github.com/sukeesh/GoCF) ... cfparser │ │
│ │(https://github.com/gnull/cfparser) (emacs) cfparser │ │
│ │(https://github.com/ikatanic/cfparser) (cli) │ │
│★★★│The On-Line Encyclopedia of Integer Sequences (OEIS) (https://oeis.org/) │A stunning encyclopedia with a database of countless integer sequences. It also features a powerful search engine. Sometimes a │
│ │ │seemingly difficult combinatorics problem could be equivalent to a simple or studied integer sequence. │
│★★☆│Syntax Highlighters: ... tohtml.com (https://tohtml.com/) ... markup.su │Very handy for creating slides or team notebooks with pretty, formatted code snippets. Just copy the highlighted code snippets │
│ │(http://markup.su/highlighter/) ... hilite.me (http://hilite.me/) │and paste them in your favorite WYSIWYG (What-You-See-Is-What-You-Get) editor! │
│★★☆│Code Sharing: ... Ideone.com (https://ideone.com/) ... Pastebin.com │These tools generate semi-permanent pages for code sharing. Very useful especially when you're trying to get someone else to look│
│ │(https://pastebin.com/) ... Ubuntu Pastebin (https://paste.ubuntu.com/) │into your code. │
│★★☆│Ineffable (http://codeforces.com/blog/entry/19083) │A simple command-line grader for local grading. │
│★★☆│uDebug (https://www.udebug.com/) │A platform that provides expected outputs for user-specified inputs to problems on the UVa Online Judge. Some problems also │
│ │ │provide additional test cases for debugging. │
Contest Preparation
│ ☆ │ Name │ Description │
├───┼──────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│★★★│polygon (https://polygon.codeforces.com/) │polygon provides a platform and a rich set of tools for professional contest preparation. ... An example: Validators with testlib.h - Codeforces │
│ │ │(http://codeforces.com/blog/entry/18426) │
│★★☆│Graph Editor (https://csacademy.com/app/graph_editor/)│A fantastic tool to create and visualize graphs. │
│★★☆│tcframe (https://github.com/ia-toki/tcframe) │A C++ framework for generating test cases of competitive programming problems. │
│★★★│Virtual Judge (vjudge) (http://vjudge.net) │Virtual Judge (vjudge) allows users to create virtual contests with problems from notable problem archives. │
│★★☆│BNU Online Judge (https://www.bnuoj.com/v3/) │BNU Online Judge also allows users to create virtual contests. │
│★★☆│Kattis (https://open.kattis.com/) │Kattis assists in contest preparation (E-mail them for assistance). │
Community
▐ Meet the god-like competitive programmers!
Learn helpful tips, tutorials and insights from these people :)
Blogs
│ Name (Handle) │ Blog Name │
├─────────────────────────────────────────┼─────────────────────────────────────────────────────────┤
│ │Codeforces blogs (http://codeforces.com/) │
│Petr Mitrichev (Petr) │Algorithms Weekly (https://petr-mitrichev.blogspot.com/) │
│Makoto Soejima (rng_58) │rng_58's blog (https://rng-58.blogspot.com) │
│Bruce Merry (bmerry) │Entropy always increases (http://blog.brucemerry.org.za/)│
│Przemysław Dębiak (Psyho) │Psyho's blog (http://psyho.gg/) │
│Anudeep Nekkanti (anudeep2011) │Namespace Anudeep ;) (https://blog.anudeep2011.com/) │
│vexorian (vexorian) │vexorian's blog (http://www.vexorian.com/) │
│Ashar Fuadi (fushar) │Fushar's blog (http://fusharblog.com/) │
│LiJie Chen (WJMZBMR) │WJMZBMR (Chinese) (http://wjmzbmr.com/) │
│Huang I-Wen (dreamoon) │小月的耍廢日誌 (Chinese) (http://dreamoon4.blogspot.com/)│
│Shiang-Yun Yang (morris1028) │Morris' Blog (Chinese) (http://morris821028.github.io/) │
│Yuhao Du (TooDifficuIt, TooSimple, xudyh)│xudyh (Chinese) (http://xudyh.github.io/) │
Youtube and Livestreams
│ Name (Handle) │ Link │
├──────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│Petr Mitrichev (Petr) │Youtube (https://www.youtube.com/channel/UCdmeooqNtlN7IhrKlq7hGDA) │
│Gate Lectures by Ravindrababu Ravula │Youtube (https://www.youtube.com/channel/UCJjC1hn78yZqTf0vdTC6wAQ) │
│Mostafa Saad Ibrahim (mostafa.saad.fci) │Competitive Programming Youtube (Arabic Speech-English Text) (https://www.youtube.com/user/nobody123497) │
│Tushar Roy │Youtube (https://www.youtube.com/user/tusharroy2525), with many tutorial videos. │
│GeeksforGeeks │Youtube (https://www.youtube.com/channel/UC0RhatS1pyxInC00YKjjBqQ) │
│Algorithms Live! │Youtube (https://www.youtube.com/channel/UCBLr7ISa_YDy5qeATupf26w) │
│CodeChef │Youtube (https://www.youtube.com/user/codechefofficial/featured) │
│HackerRank │Youtube (https://www.youtube.com/channel/UCOf7UPMHBjAavgD0Qw5q5ww/videos) │
│IDeserve │Youtube (https://www.youtube.com/channel/UCMNkvKnD3mo3Jj9eTwJllWw/featured) │
│code_report │Youtube (https://www.youtube.com/channel/UC1kBxkk2bcG78YBX7LMl9pQ), with contest updates and problem tutorials of HackerRank, LeetCode, Topcoder and Codeforces. │
│"Sothe" the Algorithm Wolf │Youtube (https://www.youtube.com/channel/UCwsapfci2p1oDVO4Q2sJOQw) │
│Egor Kulikov (Egor) │Youtube (https://www.youtube.com/channel/UCjlLfxSPkYluCDetlwbLpjQ) │
│Adam Bardashevich (subscriber) │Youtube (https://www.youtube.com/channel/UCc4jWVeWjUfpUo8z4PHfopw) │
│Bohdan Pryshchenko (I_love_Tanya_Romanova)│Twitch (https://www.twitch.tv/lebron_stream), Youtube (https://www.youtube.com/channel/UCWqqnonyL7aVeUYl5Yp8TrQ) │
│Vladimir Smykalov (enot.1.10) │Twitch (https://www.twitch.tv/enot110), Youtube (https://www.youtube.com/channel/UCWEVsnIXiD5mgWM0LFwZBzA) │
│Aleksandar Abas (Alex7) │Youtube (https://www.youtube.com/channel/UCQ5k0-BMFhfvfJQik1r5ZVw) │
│Mikhail Tikhomirov (Endagorion) │Youtube (https://www.youtube.com/user/Endagorion/) │
│Kamil Debowski (Errichto) │Youtube (https://www.youtube.com/channel/UCBr_Fu6q9iHYQCh13jmpbrg) │
│David Harmeyer (SecondThread) │Youtube (https://www.youtube.com/channel/UCXbCohpE9IoVQUD2Ifg1d1g), Editorials, High qualtiy lectures(advanced topics) │
│mycodeschool │Youtube (https://www.youtube.com/user/mycodeschool), High quality videos on basic programming, data structures and algorithms │
│William Lin (tmwilliamlin168) │Youtube (https://www.youtube.com/channel/UCKuDLsO0Wwef53qdHPjbU2Q), Mostly streams, tips but inspiring and sometimes insightful │
│CodeNCode (kazama460) │Youtube (https://www.youtube.com/channel/UC0zvY3yIBQTrSutsV-4yscQ), Short lectures covering various CP related topics like Graph Theory, Number theory, DP, Advanced │
│ │Data structures. │
│Colin Galen (galen_colin) │Youtube (https://www.youtube.com/channel/UCpvS3EykHW--l0ogUhMEjEw), Editorials, screencasts │
│William Feset │Youtube (https://www.youtube.com/user/purpongie), High quality videos covering almost all data structures, algorithms │
Quora
▐ Visit Competitive Programming - Quora (https://www.quora.com/topic/Competitive-Programming) (Top 10 Most Viewed Writers (https://www.quora.com/topic/Competitive-Programming/writers)).
│ Important Community Figures │ Description │
├──────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│Bill Poucher (https://www.quora.com/profile/Bill-Poucher) │Executive Director of ACM-ICPC (https://icpc.baylor.edu). CS Professor at Baylor University. │
│Michal Forišek (misof) (https://www.quora.com/profile/Michal-Fori%C5%A1ek)│Organizer of IPSC (https://ipsc.ksp.sk) and IOI (https://ioinformatics.org/). CS Teacher at Comenius University in Slovakia. Algorithm│
│ │and CS Education Researcher. Former highly-rated competitive programmer. │
│Ahmed Aly (ahmed_aly) (https://www.quora.com/profile/Ahmed-Aly) │Founder of A2OJ (https://www.quora.com/profile/Ahmed-Aly). HackerRank (https://www.hackerrank.com) Lead Software Engineer. Former │
│ │member of the Google Code Jam (https://code.google.com/codejam/) team. │
│ Competitive Programmers │ │ │
├─────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────┤
│Thanh Trung Nguyen (I_love_Hoang_Yen) │Brian Bi (bbi5291) (https://www.quora.com/profile/Brian-Bi)│Jonathan Paulson (jonathanpaulson) │
│ (https://www.quora.com/profile/Thanh-Trung-Nguyen) │ │ (https://www.quora.com/profile/Jonathan-Paulson) │
│Miguel Oliveira (mogers) │Egor Suvorov (yeputons) │Michal Danilák (Mimino) (https://www.quora.com/profile/Michal-Danil%C3%A1k) │
│ (https://www.quora.com/profile/Miguel-Oliveira-2) │ (https://www.quora.com/profile/Egor-Suvorov) │ │
│Bohdan Pryshchenko (I_love_Tanya_Romanova) │Vladimir Novakovski (vnovakovski) │Nick Wu (xiaowuc1) (https://www.quora.com/profile/Nick-Wu-4) │
│ (https://www.quora.com/profile/Bohdan-Pryshchenko) │ (https://www.quora.com/profile/Vladimir-Novakovski) │ │
│Cosmin Negruseri (https://www.quora.com/profile/Cosmin-Negruseri) │Lalit Kundu (darkshadows) │Ashish Kedia (ashish1294) (https://www.quora.com/profile/Ashish-Kedia) │
│ │ (https://www.quora.com/profile/Lalit-Kundu) │ │
│Johnny Ho (random.johnnyh) (https://www.quora.com/profile/Johnny-Ho) │Joshua Pan (lonerz) │Anudeep Nekkanti (anudeep2011) (https://www.quora.com/profile/Anudeep-Nekkanti)│
│ │ (https://www.quora.com/profile/Joshua-Pan-1) │ │
│Steven Hao (stevenkplus) (https://www.quora.com/profile/Steven-Hao) │Raziman T.V. (razimantv) │ │
│ │ (https://www.quora.com/profile/Raziman-T-V) │ │
Other Awesome Resources
Articles
▐ Informative and helpful articles
│ Subject │
├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│Overview of Programming Contests (http://psyho.gg/overview-of-programming-contests/), by Przemysław Dębiak (Psyho) │
│The 'science' of training in competitive programming - Codeforces (http://codeforces.com/blog/entry/17842), by Thanh Trung Nguyen (I_love_Hoang_Yen) │
│If you ask me how to improve your algorithm competition skill, I will give you the link of this blog. - Codeforces (http://codeforces.com/blog/entry/16599), by Huang I-Wen (dreamoon) │
│How to prepare for ACM - ICPC? - GeeksforGeeks (http://www.geeksforgeeks.org/how-to-prepare-for-acm-icpc/), by Vishwesh Shrimali │
│Complete reference to competitive programming - HackerEarth (https://www.hackerearth.com/getstarted-competitive-programming/), by Ravi Ojha │
│Getting started with the sport of competitive programming - HackerEarth (https://www.hackerearth.com/practice/notes/getting-started-with-the-sport-of-programming/), by Triveni Mahatha│
FAQs
▐ Fine answers to frequently-asked questions
│ Question │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│How do I start competitive programming? - Quora (https://www.quora.com/How-do-I-start-competitive-programming-5) │
│How can I become good at competitive programming? - Quora │
│(https://www.quora.com/How-can-I-become-good-at-competitive-programming-Are-there-any-courses-that-will-take-me-one-step-forward-before-I-start-doing-SPOJ-or-TopCoder-problems) ... What is the best strategy to│
│improve my skills in competitive programming in 2-3 months? - Quora (https://www.quora.com/What-is-the-best-strategy-to-improve-my-skills-in-competitive-programming-in-2-3-months) ... What is a good 6 month │
│plan to start and progress through competitive programming? - Quora (https://www.quora.com/What-is-a-good-6-month-plan-to-start-and-progress-through-competitive-programming) │
│How is competitive programming different from real-life programming? - Quora (https://www.quora.com/How-is-competitive-programming-different-from-real-life-programming) │
│What have you gained from competitive programming? - Quora (https://www.quora.com/What-have-you-gained-from-competitive-programming) │
Awesome Lists
▐ Relevant awesome lists
│ Name │ Link │
├───────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│C++ Books │The Definitive C++ Book Guide and List - Stack Overflow (https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)│
│Java Books │What are the best books to learn Java? - Quora (https://www.quora.com/What-are-the-best-books-to-learn-Java) │
│Advanced Java Books │What is the best book for advanced Java programming? - Quora (https://www.quora.com/What-is-the-best-book-for-advanced-Java-programming) │
│Algorithms │tayllan/awesome-algorithms (https://github.com/tayllan/awesome-algorithms) │
│Algorithm Visualization │enjalot/algovis (https://github.com/enjalot/algovis) │
│Math │rossant/awesome-math (https://github.com/rossant/awesome-math) │
│C++ │fffaraz/awesome-cpp (https://github.com/fffaraz/awesome-cpp) │
│Java │akullpp/awesome-java (https://github.com/akullpp/awesome-java) │
│Courses │prakhar1989/awesome-courses (https://github.com/prakhar1989/awesome-courses) │
│Free Programming Books │vhf/free-programming-books (https://github.com/EbookFoundation/free-programming-books) │
│Community-curated C++ Resources│Hackr.io (https://hackr.io/tutorials/learn-c-plus-plus) │
Interview Questions
│ Name │ Description │
├───────────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│CareerCup (https://www.careercup.com) │The most popular website for software engineering interview preparation. │
│InterviewBit (https://www.interviewbit.com) │Features intriguing and refreshing game-play designs which are designed to invoke one's interest in practicing.│
│Awesome Interviews (https://github.com/MaximAbramchuck/awesome-interview-questions)│A curated list of awesome interview questions │
│LeetCode (https://leetcode.com) │Well-organized website for software engineering interview preparation with best explanined solutions. │
License
!Creative Commons Attribution 4.0 International (https://i.creativecommons.org/l/by/4.0/88x31.png) (https://creativecommons.org/licenses/by/4.0/)
Awesome Competitive Programming is licensed under a Creative Commons Attribution 4.0 International License (https://creativecommons.org/licenses/by/4.0/).