Learning Resources

This page mainly lists online judges, problem collections, books, tools, and other resources related to algorithm competitions.

Online Judges

An online judging system (English: Online Judging System, abbreviated as OJ) is generally used for problem-solving practice, participating in and organizing contests, and communication and sharing among users.

Mainland China

  • 51Nod: many worthwhile mathematics and thinking problems to try.
  • Comet OJ: started in 2018, aiming to provide a platform for algorithm enthusiasts to compete, practice, and communicate; it frequently holds high-quality original contests and has a rich problem archive.
  • HDU Online Judge started in 2005. It is the online judging system of Hangzhou Dianzi University and has problems from multi-university training contests.
  • HydroOJ: started in 2021, and is the official site of the open-source project Hydro. Users can create their own domains, where they can use functions available on the main site, such as problem archives, contests, and discussions.
  • Judge Duck Online was developed by SongSongSong based on the open-source project JudgeDuck, and can measure the runtime of judging programs precisely to the microsecond. (There are relatively few problems.)
  • LibreOJ: started in 2017. Based on the open-source project Lyrio, with Libre meaning freedom. All test data for problems and submitted code are open to all users. It is currently maintained by Menci.
  • CDOJ: the online judging system of the University of Electronic Science and Technology of China, started in 2012.
  • Luogu: started in 2013, with a large community and a relatively complete collection of real and practice problems from various OI contests. It provides paid educational services.
  • Nowcoder: started in 2014, providing services such as technical job-search preparation, community communication, and enterprise recruitment.
  • OpenJudge: started in 2005, a group judging platform developed by the POJ team.
  • POJ: Peking University Online Judge, started in 2003 and one of the oldest OJs in China. It contains many problems in English, including both introductory problems and worthwhile challenges. POJ problems can be submitted in the Bailian problem archive.
  • PTA (Pintia A): started in 2016, a product of Hangzhou Baiteng Education Technology Co., Ltd., which originated from Zhejiang University.
  • QOJ: collects many OI and ICPC contest problems from China and abroad, with considerable training value.
  • Universal Online Judge: started in 2014, with Universal meaning general-purpose; the project is open source. VFK's OJ has many original contest problems and CCF/THU problems, with relatively high difficulty.
  • Vijos: started in 2005. Projects such as the server and judge are open source.
  • WZOI: started in 2017, an open-source judging system maintained by Wenzhou High School in Zhejiang Province.
  • ZOJ: Zhejiang University Online Judge, started in 2001.

Outside Mainland China

  • AizuOJ: the online judging system of the University of Aizu in Japan, started in 2004. It contains problems from several Japanese high-school and university programming contests, and includes introductory courses in programming, data structures, and algorithms.
  • AtCoder: a Japanese OJ. Its Japanese version has contests from Japanese universities that are not shown in the English version. Its problems are interesting and generally high quality.
  • CodeChef: an Indian OJ that holds contests periodically. Its system is based on SPOJ's Sphere Engine.
  • Codeforces: a Russian OJ, started in 2010, founded by Mike Mirzayanov. It has multiple contest series and supports individual problem setting and applications to organize contests. Its problems are generally high quality.
  • CSES(Code Submission Evaluation System), a problem archive organized by topic, intended to become a comprehensive high-quality problem archive. It was developed mainly by Antti Laaksonen, the author of Competitive Programmer’s Handbook, and started in 2013.
  • CS Academy
  • DMOJ, an open-source Canadian OJ with broad language support. Its problem archive consists of records of major contests, and it also holds its own contests regularly.
  • HackerRank has many contests.
  • Kattis: its problem archive mainly contains problems similar to those in ICPC contests. It rates users according to their problem-solving performance and recommends problems in four difficulty categories—trivial, easy, medium, and hard—suited to their level; problem difficulty is evaluated using a system similar to Elo ratings.
  • LeetCode, a problem-solving website for software-engineering interviews, has a Chinese site: LeetCode China.
  • Light OJ
  • Open Trains: a training platform for Russia's Open Cup contests, built on the open-source ejudge system. It supports virtual contests; its problem archive contains problems from previous Open Cup contests and the Petrozavodsk training camp.
  • SPOJ, started in 2003. Its back-end system, Sphere Engine, was commercialized in 2008; it supports problem likes and tags.
  • TopCoder, started in 2001. Its competitive programming community has many contests; its main business is now technical crowdsourcing.
  • TimusOJ, started in 2000 and developed by Ural Federal University, has the largest online judging problem archive in Russia. Its problems mainly come from university contests at Ural Federal University, the Ural Championship, the ICPC Ural Regional Contest, and the Petrozavodsk training camp.
  • Online Judge (formerly UVaOJ) started in 1995 and was the earliest OJ to become internationally renowned. Its founder was Professor Miguel Ángel Revilla of the University of Valladolid (UVa) in Spain. Because Professor Revilla sadly passed away in 2018 and the University of Valladolid stopped maintaining it, UVaOJ was renamed Online Judge in July 2019. The platform's current maintainers are building a new judging platform on GitHub.
  • Yandex has archived the All-Russian Olympiad in Informatics from the past several years.

Tutorial Materials

Books

The authors of the books in this list are indicated; translators are not listed. Since there are no books with the same titles and they are easy to find, ISBNs are not provided.

  • Liu Rujia series
  • Advanced Guide to Algorithm Competitions - Li Yudong
  • Aha! Algorithms - Ji Lei
    • For beginners or people with an initial interest; includes humorous illustrations.
  • CCF Series on Computer Programming for Middle School Students
    • CCF Computer Programming for Middle School Students—Introduction - Chen Ying, Qiu Guixiang, and Zhu Quanmin
    • CCF Computer Programming for Middle School Students—Basics - Jiang Tao, Song Xinbo, and Zhu Quanmin
    • CCF Computer Programming for Middle School Students—Advanced - Xu Xianyou and Zhu Quanmin
    • CCF Computer Programming for Middle School Students—Professional (not published)
  • Step-by-Step series
    • Step-by-Step Programming Contests—Basics - Luogu Online School's teaching and research team
  • One Book Through series
    • One Book Through the Olympiad in Informatics - Dong Yongjian
    • One Book Through the Olympiad in Informatics—Advanced - Huang Xinjun and Dong Yongjian
    • One Book Through the Olympiad in Informatics—Expert Training - Huang Xinjun and Dong Yongjian
  • Other textbooks written by renowned OI coaches in China
    • Complete Guide to the Olympiad in Informatics - Lin Houcong
    • The Game of Smart People: Exploring Informatics—Advanced - Jiang Tao and Chen Maoxian
    • Introduction to Computing: C++ Programming and the Olympiad in Informatics - Jin Jing
    • The Algorithm Competition Compendium - Zhang Xinhua
  • ACM International Collegiate Programming Contest series
    • ACM International Collegiate Programming Contest Series: Knowledge and Introduction - Yu Yong
    • ACM International Collegiate Programming Contest Series: Algorithms and Implementation - Yu Yong
    • ACM International Collegiate Programming Contest Series: Problems and Explanations - Yu Yong
  • From Beginner to Advanced in Algorithm Competitions - Luo Yongjun and Guo Weibin
  • Introduction to Algorithms, third edition - Thomas H.Cormen/Charles E.Leiserson/Ronald L.Rivest/Clifford Stein
    A classic university textbook, known as the black book. The original English title is Introduction to Algorithms.
  • Concrete Mathematics, second edition - Ronald L. Graham/Donald E. Knuth/Oren Patashnik
    The original English title is Concrete Mathematics.
  • Introductory Combinatorics, fifth edition - Richard A.Brualdi
    The original English title is Introductory Combinatorics.
  • Challenge Programming Contest complete set - Takuya Akiha, Yoichi Iwata, and Yoshitoshi Kitagawa Written in an easy-to-understand style.
  • The Algorithms - Sanjoy Dasgupta/Christos Papadimitriou/Umesh Vazirani
    • Concise and comprehensive, but with relatively little content.
  • Notes on Data Structures and Algorithms by Legend-K
  • acm-cheat-sheet
  • Competitive Programmer’s Handbook- Antti Laaksonen
    • The author spent three years of personal time completing it. It is aimed at algorithm competitions, has broad coverage, and balances detail and brevity well.
  • Programming Challenges: The Programming Contest Training Manual- Steven S. Skiena/Miguel A. Revilla
  • C++, Programming Challenges—An Advanced Guide to Programming Contest Training - Qiu Qiu
  • Data Structures (C++ Language Edition, 3rd Edition) - Deng Junhui
    • Recommended to use together with the accompanying course, courseware, and exercise explanations.
  • Computational Geometry: Algorithms and Applications - written by Berg (M.D. Berg) and translated by Deng Junhui
    The original English title is Computational Geometry: Algorithms and Applications.
  • Handbook of Data Structures and Applications, 2nd Edition
    • Coauthored by many renowned professors, such as Sartaj Sahni, Hanan Samet, and Weiss. It contains a lot of material and is recommended for data-structure enthusiasts with some foundation.
  • Algorithms Illuminated series
    • Textbooks for beginners with a foundation in programming languages; recommended to use together with the accompanying course.
    • Algorithms Illuminated, Part 1: The Basics - Tim Roughgarden
    • Algorithms Illuminated, Part 1: Algorithm Basics - translated by Xu Bo
    • Algorithms Illuminated, Part 2: Graph Algorithms and Data Structures - Tim Roughgarden
    • Algorithms Illuminated, Part 2: Graph Algorithms and Data Structures - translated by Xu Bo
    • Algorithms Illuminated, Part 3: Greedy Algorithms and Dynamic Programming - Tim Roughgarden
    • Algorithms Illuminated, Part 4: Algorithms for NP-Hard Problems - Tim Roughgarden

Courses

Tools

Problem Sets and Resources

This content comes from OI Wiki: Learning Resources. See the original for authors and revision history. AIOJ has adapted the formatting, in-site links, and resource paths.

Content is shared under CC BY-SA 4.0 and SATA license; additional terms are governed by the original notice. Thanks to the OI Wiki authors and contributors; per the SATA terms, please visit the OI Wiki repository and star it to show your support.