261 KiB
261 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 │
│ │ (http://codeforces.com/blog/entry/13529) │intriguing ones include 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 │
│ │(https://www.quora.com/What-is-a-list-of-data-structures-that-a-competitive-programmer-must-know/an│browser bookmark. │
│ │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 │
│ │ (https://www.topcoder.com/community/data-science/data-science-tutorials/) │sciences from here. │
│★★★│E-Maxx (Russian) (http://e-maxx.ru/algo/), (English) │A tutorial website widely used and referenced in the Russian-speaking competitive programming community. │
│ │(http://cp-algorithms.com/) │Most of the articles 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 │
│ │ (https://www.geeksforgeeks.org/fundamentals-of-algorithms/) │resource for 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 │
│ │(https://www.commonlounge.com/discussion/d4a14f601eb44281b6c579e73d126cca/mai│ones available on 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│
│ │ (https://www.mii.lt/olympiads_in_informatics/index.html) │of teaching and 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 │
│ │ (http://download.csdn.net/album/detail/657/1/1) │regions emphasize 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 │
│ │Programming YouTube Channel (https://www.youtube.com/user/nobody123497) │algorithmic topics by Mostafa 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 ... │
│ │ (https://github.com/prakhar1989/awesome-courses#algorithms) │etc.). │
│★★★│MIT SMA 5503: Introduction to Algorithms │Lectured by Prof. Charles Leiserson (one of the coauthors of Introduction to Algorithms) and Prof.│
│ │(https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introd│Erik Demaine (a brilliant professor who has made remarkable breakthroughs in data science), the │
│ │uction-to-algorithms-sma-5503-fall-2005/) │course offers great materials, 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 │
│ │(https://www.amazon.com/Programming-Challenges-Contest-Training-Computer/dp/0387001638), by Steven Skiena │theory and key concepts necessary for approaching them. Problems are │
│ │and Miguel Revilla │organized by topic, and supplemented by complete 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 │
│ │ (https://nostarch.com/algorithmic-thinking), by Daniel Zingaro │programming problems (IOI, USACO, CCC/CCO, etc.). │
│★★☆│Computational Geometry: Algorithms and Applications │This is a well-written book which covers a broad range of computational │
│ │(https://www.amazon.com/Computational-Geometry-Applications-Mark-Berg/dp/3540779736), by Mark de Berg, │geometry problems. │
│ │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), by Nite Nimajneb │(http://comscigate.com/Books/contests/icpc.pdf). This book 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│
│ │Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein │"bible" for algorithms and data structures. It's one of the most popular textbooks │
│ │ │for university algorithm courses. This book covered various algorithms and data │
│ │ │structures in great detail. The writing is more rigorous and can be difficult to │
│ │ │some. │
│★★☆│Algorithm Design (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 │
│ │ (https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693), by Steven S. Skiena │books. You can also 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 │
│ │Sedgewick and Kevin Wayne │illustrations. It is 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 │
│ │ (https://www.manning.com/books/algorithms-and-data-structures-in-action), by Marcello La Rocca │practical angle, 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 │
│ │ (https://www.amazon.com/Discrete-Mathematics-Applications-Kenneth-Rosen/dp/0072899050), by Kenneth H. Rosen │relevant to competitive programming. │
│ │ │This book provides comprehensive │
│ │ │materials on a wide range of topics │
│ │ │including: Logics and Proofs, Sets, │
│ │ │Functions, Sequences, Matrices, Number│
│ │ │Theory, Recursion, Counting, │
│ │ │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 │
│ │ (https://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025), by Ronald L. Graham, Donald E. Knuth, Oren Patashnik │Discrete Mathematics with more │
│ │ │emphases on number-related topics. │
│★★☆│Linear Algebra and Its Applications │The book does a brilliant job at │
│ │(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│bridging the gap between a physical │
│ │+Applications), by David C. Lay, Steven R. Lay, Judi J. McDonald │system (for scientists and engineers) │
│ │ │and an abstract system (for │
│ │ │mathematicians). │
│★★☆│Introduction to Probability │This is a well-written introductory │
│ │ (http://www.dartmouth.edu/~chance/teaching_aids/books_articles/probability_book/book.html), by Charles M. Grinstead, J. Laurie Snell │probabilities book. ... It's free for │
│ │ │download (pdf) │
│ │ │(http://www.dartmouth.edu/~chance/teac│
│ │ │hing_aids/books_articles/probability_b│
│ │ │ook/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 │
│ │ (https://code.google.com/codejam/) │which must be solved 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 │
│ │(http://judge.u-aizu.ac.jp/onlinejudg│competitions in Japan. │
│ │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 │
│ │ (https://www.hackerrank.com) │can be solved in a 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 │
│ │ (http://coj.uci.cu/index.xhtml) │styles, mostly from 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 │
│ │ (https://www.russiancodecup.ru/en/) │contestants are given 4-8 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│
│ │ (https://omegaup.com/) (Spanish) │de Informática) is 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 │
│ │ (https://github.com/kth-competitive-programming/kactl), by Simon Lindholm (simonlindholm) et al. │Institute of Technology. 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 │
│ │Watameda (I_love_Hoang_Yen, flashmt, nguyenhungtam) from National University of Singapore │World Finals. The items 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 │
│ │bobogei81123, step5) from National Taiwan University │Finals. This notebook 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 │
│ │ (https://github.com/foreverbell/acm-icpc-cheat-sheet), by foreverbell (foreverbell) │the China informatics 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-templat│ │
│ │e-library-part-1/), Part 2 │ │
│ │(https://www.topcoder.com/community/data-science/data-science-tutorials/power-up-c-with-the-standard-templat│ │
│ │e-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│Plentiful C++ tricks for competitive programming. Note that some should be │
│ │a programming contest? - Quora │used with care. │
│ │(https://www.quora.com/Competitive-Programming/What-are-some-cool-C++-tricks-to-use-in-a-programming-contest│ │
│ │) │ │
│★★★│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 │A basic but faster custom BigInteger class │
│ │ (http://codeforces.com/blog/entry/17235) │ │
│★★☆│EZ Collections, EZ Life (new Java library for contests) - Codeforces │A Java library for contests written by Alexey Dergunov (dalex). ArrayList, │
│ │ (http://codeforces.com/blog/entry/14328) │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 │
│ │(https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-editio│topics. │
│ │n/) │ │
│★★☆│Object-Oriented C Style Languages: C++, Objective-C, Java, C# - a side-by-side reference │A detailed side-by-side reference sheet for common syntaxes. │
│ │sheet (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 │
│ │ │Cross-Platform │with solely 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 │
│ │(https://www.gnu.org/software/emacs/downlo│Cross-Platform │constantly brought up due to their popularity. Basically Emacs is more than just a text editor. It has plugins like file │
│ │ad.html) │ │managers, web browsers, mail clients and news 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 │
│ │(https://www.farmanager.com/download.php?l│ │its bare bones, but you can install FarColorer (http://colorer.sourceforge.net/farplugin.html) - a syntax highlighter plugin│
│ │=en) │ │to program on it. Properly configured, 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 │
│ │ (http://codeblocks.org/downloads) │Cross-Platform │usually provided along 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 │
│ │(https://www.jetbrains.com/idea/#chooseYou│Cross-Platform │main language. Be sure to check out CHelper (https://plugins.jetbrains.com/plugin/7091-chelper), a very handy plugin written│
│ │rEdition) │ │for programming contests. │
│★★☆│Sublime Text │GUI / │Sublime Text is an extraordinary text editor. Packed with powerful and innovative features like Multiple Carets, Minimaps │
│ │ (https://www.sublimetext.com/3) │Cross-Platform │and Command Palletes, 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 │
│ │ (https://www.eclipse.org/downloads/) │Cross-Platform │standards). Sometimes 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│
│ │(https://www.jetbrains.com/clion/download/│Cross-Platform │are available OR 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) │time on switching windows and copy-pasting back and forth. │
│ │(IntelliJ IDEA) (manual │ │
│ │(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) │A stunning encyclopedia with a database of countless integer sequences. It also features a powerful search engine. Sometimes a │
│ │ (https://oeis.org/) │seemingly difficult combinatorics problem could be equivalent to a simple or studied integer sequence. │
│★★☆│Syntax Highlighters: ... tohtml.com │Very handy for creating slides or team notebooks with pretty, formatted code snippets. Just copy the highlighted code snippets │
│ │(https://tohtml.com/) ... markup.su │and paste them in your favorite WYSIWYG (What-You-See-Is-What-You-Get) editor! │
│ │(http://markup.su/highlighter/) ... hilite.me │ │
│ │(http://hilite.me/) │ │
│★★☆│Code Sharing: ... Ideone.com (https://ideone.com/) ... │These tools generate semi-permanent pages for code sharing. Very useful especially when you're trying to get someone else to look│
│ │Pastebin.com (https://pastebin.com/) ... Ubuntu │into your code. │
│ │Pastebin (https://paste.ubuntu.com/) │ │
│★★☆│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) │Organizer of IPSC (https://ipsc.ksp.sk) and IOI (https://ioinformatics.org/). CS Teacher at Comenius University in Slovakia. │
│ (https://www.quora.com/profile/Michal-Fori%C5%A1ek) │Algorithm and CS Education Researcher. Former highly-rated competitive programmer. │
│Ahmed Aly (ahmed_aly) │Founder of A2OJ (https://www.quora.com/profile/Ahmed-Aly). HackerRank (https://www.hackerrank.com) Lead Software Engineer. │
│ (https://www.quora.com/profile/Ahmed-Aly) │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/Miguel-Oliveira-2) │ (https://www.quora.com/profile/Egor-Suvorov) │ (https://www.quora.com/profile/Michal-Danil%C3%A1k) │
│Bohdan Pryshchenko (I_love_Tanya_Romanova) │Vladimir Novakovski (vnovakovski) │Nick Wu (xiaowuc1) │
│ (https://www.quora.com/profile/Bohdan-Pryshchenko) │ (https://www.quora.com/profile/Vladimir-Novakovski) │ (https://www.quora.com/profile/Nick-Wu-4) │
│Cosmin Negruseri (https://www.quora.com/profile/Cosmin-Negruseri) │Lalit Kundu (darkshadows) │Ashish Kedia (ashish1294) │
│ │ (https://www.quora.com/profile/Lalit-Kundu) │ (https://www.quora.com/profile/Ashish-Kedia) │
│Johnny Ho (random.johnnyh) (https://www.quora.com/profile/Johnny-Ho) │Joshua Pan (lonerz) │Anudeep Nekkanti (anudeep2011) │
│ │ (https://www.quora.com/profile/Joshua-Pan-1) │ (https://www.quora.com/profile/Anudeep-Nekkanti) │
│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 │
│ │ (http://codeforces.com/blog/entry/13529) │intriguing ones include 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 │
│ │(https://www.quora.com/What-is-a-list-of-data-structures-that-a-competitive-programmer-must-know/an│browser bookmark. │
│ │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 │
│ │ (https://www.topcoder.com/community/data-science/data-science-tutorials/) │sciences from here. │
│★★★│E-Maxx (Russian) (http://e-maxx.ru/algo/), (English) │A tutorial website widely used and referenced in the Russian-speaking competitive programming community. │
│ │(http://cp-algorithms.com/) │Most of the articles 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 │
│ │ (https://www.geeksforgeeks.org/fundamentals-of-algorithms/) │resource for 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 │
│ │(https://www.commonlounge.com/discussion/d4a14f601eb44281b6c579e73d126cca/mai│ones available on 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│
│ │ (https://www.mii.lt/olympiads_in_informatics/index.html) │of teaching and 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 │
│ │ (http://download.csdn.net/album/detail/657/1/1) │regions emphasize 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 │
│ │Programming YouTube Channel (https://www.youtube.com/user/nobody123497) │algorithmic topics by Mostafa 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 ... │
│ │ (https://github.com/prakhar1989/awesome-courses#algorithms) │etc.). │
│★★★│MIT SMA 5503: Introduction to Algorithms │Lectured by Prof. Charles Leiserson (one of the coauthors of Introduction to Algorithms) and Prof.│
│ │(https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introd│Erik Demaine (a brilliant professor who has made remarkable breakthroughs in data science), the │
│ │uction-to-algorithms-sma-5503-fall-2005/) │course offers great materials, 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 │
│ │(https://www.amazon.com/Programming-Challenges-Contest-Training-Computer/dp/0387001638), by Steven Skiena │theory and key concepts necessary for approaching them. Problems are │
│ │and Miguel Revilla │organized by topic, and supplemented by complete 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 │
│ │ (https://nostarch.com/algorithmic-thinking), by Daniel Zingaro │programming problems (IOI, USACO, CCC/CCO, etc.). │
│★★☆│Computational Geometry: Algorithms and Applications │This is a well-written book which covers a broad range of computational │
│ │(https://www.amazon.com/Computational-Geometry-Applications-Mark-Berg/dp/3540779736), by Mark de Berg, │geometry problems. │
│ │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), by Nite Nimajneb │(http://comscigate.com/Books/contests/icpc.pdf). This book 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│
│ │Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein │"bible" for algorithms and data structures. It's one of the most popular textbooks │
│ │ │for university algorithm courses. This book covered various algorithms and data │
│ │ │structures in great detail. The writing is more rigorous and can be difficult to │
│ │ │some. │
│★★☆│Algorithm Design (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 │
│ │ (https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693), by Steven S. Skiena │books. You can also 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 │
│ │Sedgewick and Kevin Wayne │illustrations. It is 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 │
│ │ (https://www.manning.com/books/algorithms-and-data-structures-in-action), by Marcello La Rocca │practical angle, 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 │
│ │ (https://www.amazon.com/Discrete-Mathematics-Applications-Kenneth-Rosen/dp/0072899050), by Kenneth H. Rosen │relevant to competitive programming. │
│ │ │This book provides comprehensive │
│ │ │materials on a wide range of topics │
│ │ │including: Logics and Proofs, Sets, │
│ │ │Functions, Sequences, Matrices, Number│
│ │ │Theory, Recursion, Counting, │
│ │ │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 │
│ │ (https://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025), by Ronald L. Graham, Donald E. Knuth, Oren Patashnik │Discrete Mathematics with more │
│ │ │emphases on number-related topics. │
│★★☆│Linear Algebra and Its Applications │The book does a brilliant job at │
│ │(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│bridging the gap between a physical │
│ │+Applications), by David C. Lay, Steven R. Lay, Judi J. McDonald │system (for scientists and engineers) │
│ │ │and an abstract system (for │
│ │ │mathematicians). │
│★★☆│Introduction to Probability │This is a well-written introductory │
│ │ (http://www.dartmouth.edu/~chance/teaching_aids/books_articles/probability_book/book.html), by Charles M. Grinstead, J. Laurie Snell │probabilities book. ... It's free for │
│ │ │download (pdf) │
│ │ │(http://www.dartmouth.edu/~chance/teac│
│ │ │hing_aids/books_articles/probability_b│
│ │ │ook/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 │
│ │ (https://code.google.com/codejam/) │which must be solved 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 │
│ │(http://judge.u-aizu.ac.jp/onlinejudg│competitions in Japan. │
│ │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 │
│ │ (https://www.hackerrank.com) │can be solved in a 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 │
│ │ (http://coj.uci.cu/index.xhtml) │styles, mostly from 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 │
│ │ (https://www.russiancodecup.ru/en/) │contestants are given 4-8 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│
│ │ (https://omegaup.com/) (Spanish) │de Informática) is 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 │
│ │ (https://github.com/kth-competitive-programming/kactl), by Simon Lindholm (simonlindholm) et al. │Institute of Technology. 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 │
│ │Watameda (I_love_Hoang_Yen, flashmt, nguyenhungtam) from National University of Singapore │World Finals. The items 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 │
│ │bobogei81123, step5) from National Taiwan University │Finals. This notebook 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 │
│ │ (https://github.com/foreverbell/acm-icpc-cheat-sheet), by foreverbell (foreverbell) │the China informatics 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-templat│ │
│ │e-library-part-1/), Part 2 │ │
│ │(https://www.topcoder.com/community/data-science/data-science-tutorials/power-up-c-with-the-standard-templat│ │
│ │e-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│Plentiful C++ tricks for competitive programming. Note that some should be │
│ │a programming contest? - Quora │used with care. │
│ │(https://www.quora.com/Competitive-Programming/What-are-some-cool-C++-tricks-to-use-in-a-programming-contest│ │
│ │) │ │
│★★★│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 │A basic but faster custom BigInteger class │
│ │ (http://codeforces.com/blog/entry/17235) │ │
│★★☆│EZ Collections, EZ Life (new Java library for contests) - Codeforces │A Java library for contests written by Alexey Dergunov (dalex). ArrayList, │
│ │ (http://codeforces.com/blog/entry/14328) │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 │
│ │(https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-editio│topics. │
│ │n/) │ │
│★★☆│Object-Oriented C Style Languages: C++, Objective-C, Java, C# - a side-by-side reference │A detailed side-by-side reference sheet for common syntaxes. │
│ │sheet (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 │
│ │ │Cross-Platform │with solely 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 │
│ │(https://www.gnu.org/software/emacs/downlo│Cross-Platform │constantly brought up due to their popularity. Basically Emacs is more than just a text editor. It has plugins like file │
│ │ad.html) │ │managers, web browsers, mail clients and news 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 │
│ │(https://www.farmanager.com/download.php?l│ │its bare bones, but you can install FarColorer (http://colorer.sourceforge.net/farplugin.html) - a syntax highlighter plugin│
│ │=en) │ │to program on it. Properly configured, 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 │
│ │ (http://codeblocks.org/downloads) │Cross-Platform │usually provided along 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 │
│ │(https://www.jetbrains.com/idea/#chooseYou│Cross-Platform │main language. Be sure to check out CHelper (https://plugins.jetbrains.com/plugin/7091-chelper), a very handy plugin written│
│ │rEdition) │ │for programming contests. │
│★★☆│Sublime Text │GUI / │Sublime Text is an extraordinary text editor. Packed with powerful and innovative features like Multiple Carets, Minimaps │
│ │ (https://www.sublimetext.com/3) │Cross-Platform │and Command Palletes, 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 │
│ │ (https://www.eclipse.org/downloads/) │Cross-Platform │standards). Sometimes 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│
│ │(https://www.jetbrains.com/clion/download/│Cross-Platform │are available OR 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) │time on switching windows and copy-pasting back and forth. │
│ │(IntelliJ IDEA) (manual │ │
│ │(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) │A stunning encyclopedia with a database of countless integer sequences. It also features a powerful search engine. Sometimes a │
│ │ (https://oeis.org/) │seemingly difficult combinatorics problem could be equivalent to a simple or studied integer sequence. │
│★★☆│Syntax Highlighters: ... tohtml.com │Very handy for creating slides or team notebooks with pretty, formatted code snippets. Just copy the highlighted code snippets │
│ │(https://tohtml.com/) ... markup.su │and paste them in your favorite WYSIWYG (What-You-See-Is-What-You-Get) editor! │
│ │(http://markup.su/highlighter/) ... hilite.me │ │
│ │(http://hilite.me/) │ │
│★★☆│Code Sharing: ... Ideone.com (https://ideone.com/) ... │These tools generate semi-permanent pages for code sharing. Very useful especially when you're trying to get someone else to look│
│ │Pastebin.com (https://pastebin.com/) ... Ubuntu │into your code. │
│ │Pastebin (https://paste.ubuntu.com/) │ │
│★★☆│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) │Organizer of IPSC (https://ipsc.ksp.sk) and IOI (https://ioinformatics.org/). CS Teacher at Comenius University in Slovakia. │
│ (https://www.quora.com/profile/Michal-Fori%C5%A1ek) │Algorithm and CS Education Researcher. Former highly-rated competitive programmer. │
│Ahmed Aly (ahmed_aly) │Founder of A2OJ (https://www.quora.com/profile/Ahmed-Aly). HackerRank (https://www.hackerrank.com) Lead Software Engineer. │
│ (https://www.quora.com/profile/Ahmed-Aly) │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/Miguel-Oliveira-2) │ (https://www.quora.com/profile/Egor-Suvorov) │ (https://www.quora.com/profile/Michal-Danil%C3%A1k) │
│Bohdan Pryshchenko (I_love_Tanya_Romanova) │Vladimir Novakovski (vnovakovski) │Nick Wu (xiaowuc1) │
│ (https://www.quora.com/profile/Bohdan-Pryshchenko) │ (https://www.quora.com/profile/Vladimir-Novakovski) │ (https://www.quora.com/profile/Nick-Wu-4) │
│Cosmin Negruseri (https://www.quora.com/profile/Cosmin-Negruseri) │Lalit Kundu (darkshadows) │Ashish Kedia (ashish1294) │
│ │ (https://www.quora.com/profile/Lalit-Kundu) │ (https://www.quora.com/profile/Ashish-Kedia) │
│Johnny Ho (random.johnnyh) (https://www.quora.com/profile/Johnny-Ho) │Joshua Pan (lonerz) │Anudeep Nekkanti (anudeep2011) │
│ │ (https://www.quora.com/profile/Joshua-Pan-1) │ (https://www.quora.com/profile/Anudeep-Nekkanti) │
│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/).