Competitive Programming

This is the companion web site for a book: "Competitive Programming 3: The New Lower Bound of Programming Contests" and its two past editions written by myself (Steven Halim - UVa status, Kattis status) and my younger brother (Felix Halim - UVa status, Kattis status) in 2010 - present. This book is used in my course in School of Computing, National University of Singapore: CS3233 - Competitive Programming (2009-present) and available for wider audiences since 2010. This book contains a collection of competitive programming skills gained by solving more than 3 300+ UVa (1999-present) plus Kattis (2015-present) online judge problems.

Daily CP4 publicity hype, skipping Sundays (in reverse chronological order):

Major update (Tuesday, 28 April 2020; updated 08 July 2020): Because IOI 2020 has been postponed to 13-19 Sep 2020, ICPC World Finals 2020 has also been postponed to 19-24 June 2021, and with many parts of the world currently in (partial) lockdown mode, we have decided to also postpone the release of CP4, initially scheduled on 24 May 2020 at lulu.com (so that Steven/Felix/new third author Suhendry can bring fresh copies to those two international events) to about two months back, on 19 July 2020. This is to give us about two more months of extra editing time to produce an even better CP4. Note that this new release date is unlikely to be deferred any further as we predict very busy time for us when the world reopens after COVID-19 can be put under some control in most parts of the world, e.g., hosting that postponed IOI 2020 (online, on 13-19 September 2020, and also IOI 2021 on 20-27 June 2021). Meanwhile, check our latest Methods to Solve page that has been significantly updated to nearly match the content of CP4, our latest GitHub repo that is being synchronized to match the updated content of CP4, and a rough sketch of CP4 updates. We recommend readers who are about to purchase CP3 but can actually wait until 19 July 2020 to defer your purchase until then.

Major update (Wednesday, 01 January 2020): CP3 (2013 edition with a bit of 2018 upgrade) is now available in Spanish language. If you are a Spanish-speaking programmer, we recommend that you get the Spanish version that has been translated over the past 1+ year by Miguel Revilla Rodriquez (the current admin of (UVa) Online Judge). Here is the Amazon Link, ISBN: 978-1711024813.


Major update (Monday, 03 December 2018): We have updated almost all demo code that we have in CP3 into code that we will use in future CP4. We no longer use use the download page but use the following public GitHub repo instead: https://github.com/stevenhalim/cpbook-code

Major update (Tuesday, 24 October 2017): CP3 is now available in Korean language. If you are Korean, we recommend that you get the Korean version that has been translated over the past 1+ year by lewha0. Here is the publisher link: Insight Book, Korea.


About

This book contains a collection of relevant data structures, algorithms, and programming tips written for University students who want to be more competitive in the International Collegiate Programming Contest (ICPC), high school students who are aspiring to be competitive in the International Olympiad in Informatics (IOI), coaches for these competitions, those who love problem solving using computer programs, and those who go for interviews in big IT-companies.

"I cannot imagine a better complement for the UVa Online Judge site."

"Competitive Programming is a unique resource that I recommend to any student interested in raising their algorithmic programming skills to the next level. It is packed with insightful tips and techniques that are hard to find elsewhere, and remarkably thorough in its use of examples and references to sample problems."


Objectives

Our objective in writing this book is similar with the ICPC vision: To further improve humanity by training current students to be more competitive in programming contests. The possible long term effect is future Computer Science researchers who are well versed in problem solving skills. We use both C++ and Java code to illustrate the algorithmic concepts, i.e. we dislike vague pseudo-code commonly found in many other Computer Science textbooks. We also use visualization tool: VisuAlgo to help explain the data structure and algorithm concepts to our audiences and beyond.


Target Audiences