Resources to prepare yourself for the The International Collegiate Programming Contest (ICPC) or any competitive programming contest

*Photo by Ariel Besagar on Unsplash*

## What is the ICPC?

“The ICPC, the ‘International Collegiate Programming Contest,’ is an extra-curricular, competitive programming sport for students at universities around the world. ICPC competitions provide gifted students opportunities to interact, demonstrate, and improve their teamwork, programming, and problem-solving process. The ICPC is a global platform for academia, industry, and community to shine the spotlight on and raise the aspirations of the next generation of computing professionals as they pursue excellence.” — Wikipedia

### Disclaimer

I’m by no mean a top coder or a world finalist. I just wanted to share the resources I found helpful, and if you follow them, hopefully, you will be an ICPC world finalist.

## Introduction

I really like competitive programming, and I really want to be someone like Gennady Korotkevich. He is truly a living legend in the field of competitive programming.

Anyways, let’s get into the details …

## The Steps to be a Good Competitive Programmer

It’s really simple: There are no tricks and there’s no short way … all you need is dedication and a goal, and you are all set.

First, you will need to be familiar with at least one of the following programming languages: Python, Java, C, or C++.

Secondly, you will need to study all of the different topics about data structures and algorithms.

Finally, do a lot of problems … *a lot!*

## Topics

These are the main topics that should be done thoroughly.

### Number theory

Prime generation (sieve and segmented sieve)

### Greedy algorithms

### Binary search

Ubiquitous binary search — get a grasp of discrete and continuous binary searches

### Data structures

**Graph algorithms**

**String algorithms**

Learning library functions for string actually proves very helpful. (C++: See this, this, String in Java.)

**Dynamic programming**

Dynamic programming is quite important and can be infused and asked with various other topics. Some different types of DP concepts are:

**Classic DP**

**Computational geometry**

## Resources

“Competitive Programming 3”:** **This book is beyond great. I’m currently in the middle of it and I’m enjoying the problems and the book structure. I highly recommended it.

“The ‘Science’ of Training in Competitive Programming”:** **In this blog,the author explains how to train for CP and what he did in order to be a good problem solver.

How to be a red coder: This Quora answer really goes deep into how to be a red coder and train efficiently.

### Did you find this article valuable?

Support **Hassan ElDesouky** by becoming a sponsor. Any amount is appreciated!