What is ACM ICPC and how to prepare for it (the beginner’s guide)

What is ACM ICPC?
The ACM-ICPC (Association for Computing Machinery — International Collegiate Programming Contest) is a multi-tier, team-based, programming competition. Headquartered at Baylor University, Texas, it operates according to the rules and regulations formulated by the ACM. The contest participants come from over 2,000 universities that are spread across 80 countries and six continents.
To quote the post from CodeChef,
The ACM ICPC is considered as the “Olympics of Programming Competitions”. It is quite simply, the oldest, largest, and most prestigious programming contest in the world.
In terms of prize money, the top team takes home $12,000 along with the ACM ICPC 2014 Gold medal. Three other teams getting Gold Medal are awarded $6,000. Each Silver Medal team gets $3,000 and each Bronze Medal team is awarded $1,500.
Apart from that, Participants, coaches and registered staff (including volunteer helpers) receive complimentary membership to the ACM for a year.
And more importantly, the winners (and even the world finalists) get some super bragging rights and job offers from some of the top software companies in the world!

Contest structure:
The contest is divided into two rounds, regionals and world finals. The winning teams from each region qualifies for the world finals and competes in the onsite competition.
To know more about the contest structure and how to participate go to the Codechef ICPC section or ACM ICPC official site.
Preparation:
How to prepare for ACM ICPC depends on what is your current skill sets and how experienced you are in competitive programming.
If You were to begin from scratch, then the steps to prepare for ACM ICPC will look something like this :
Step 1: Choosing the right programming language
Choosing the right programming language can be a differentiating factor in the contest where everything is about speed and accuracy. If you are proficient in a particular language, then you should stick to that only. But if you don’t have any prior programming knowledge (or if you have time and want a competitive edge) then, I will advise you to go for C++, as it is used by most of the competitive programmers and for very good reasons. It is fast (faster than JAVA and Python), and it has the STL (Standard Template Library) support. You can also go for Python for its extensive library functions and easy syntax which means you don’t have to worry about missing semicolons in the heat of the contest :P
This might help you choose your language wisely :
Why do competitive programmers prefer to use C++ instead of Java in the programming contests?
Step 2 : Solve lots of problems and Participate in contests
Practice. Practice. Practice. The second step is to solve problems. A lot of them. Different kinds of problems. Once you have a basic knowledge of programming from step 1, start solving problems on online judges.And also participate in monthly contests. The more you participate in contests, the more comfortable you will feel in the contest pressure. And most importantly UPSOLVE PROBLEMS FROM CONTESTS, that is make sure you solve every problem you could not solve during the contest, after the contest. This is how you will improve as a programmer. There are a lot of sites that provide quality problems and it is very important to not get paralysed by options. The more experience you will have in competitive programming the better you will understand which website is good for which kind of problems. One site may have some great dynamic programming problems but problems from other domains could be average. You will most likely want to pick the best of every site. But you should start somewhere.
Some good sites that you should consider are:
- HackerRank *
- Programming Competition,Programming Contest,Online Computer Programming *
- Sphere Online Judge (SPOJ)
- Codeforces *
- ACM-ICPC Live Archive — Home
- UVa Online Judge — Home
(The sites that have the * , have 2–3 monthly contests. You can and should participate in some of those contests regularly.)
Step 3: Build a team
As ACM ICPC is a team based competition, you have to build a team that suits you. Some tips to build a strong team is as follows :
- Find people who are as enthusiastic and as determined as you to succeed. Because the last thing you want is a team member backing out a month prior to the competition.
- Have something to offer to the team. Which is why focus on step 2 as much as possible. The more you work on honing your skills, the better you will get at programming. The better you get yourself, the better programmers you will attract. You won’t see a team where two members are at level 10 and the other one is at level 2.
- Know your strengths and weaknesses. And find people who can fill those gaps. ( For example, you are very good at implementation but lack mathematical skills, have a team member whose strength is maths.)
- This is the second time I’m saying this, but this is very very important. Have people whose top priority till the contest ends is ACM ICPC. Because at times, as the actual competition approaches, your team will have to participate in virtual contests for 5 hours, 2–3 contests a week and will need more time to upsolve problems your team could not solve during the contest. And that will only happen when every one of the team members is equally devoted to succeed and have time to practice for it. That brings me to my last point-
Step 4 : Participate in virtual contests
Your team should participate in virtual contests as much as possible, as frequently as possible. And this is the most important element that can determine whether you will succeed or not. You and your team members should get so accustomed to solving problems, brainstorming and coordinating as a team that it comes naturally in the competition. At first it will be messy and chaotic, but with practice and time the team will build a co-ordination, as the more you practice as a team the better you will have the understanding of each other’s strengths and weaknesses.
These were the 4 steps that you should follow in order to increase your chances in ACM ICPC and to earn your bragging rights :P. There are some great articles at geeksforgeeks on this topic. You can go through it for a more in depth answer. But also remember, Once you have decided you are going for ACM ICPC, don’t overthink and over-research about how to do it. Get out of your comfort zone and start doing what needs to be done. The earlier you start preparing , the better the chances of succeeding. ALL THE BEST.
Additional Resources:
Call To Action:
I am a Google Summer of Code 2018 student intern working on an Open source Software and an aspiring entrepreneur. I write mostly about my experiences and about the things I learn and find useful. If you want to be a part of my journey then follow me on medium and on Quora.