.quan chau





Table of Contents:

Background:

  I started to learn the basics of Java programming in my first semester of college without any background in coding. Then in my second semester of freshman year, I was introduced to Dickinson Programming Club and competitive programming. I came to the weekly meetings throughout the semester despite not understanding 80% of the materials discussed by my professor and other upperclassmen, which leads to a bunch of effort I made to be the best in competitive programming of Dickinson College during the summer of 2017. I spent 2 hours a day teaching myself Data Structures and Algorithms and any free time I had solving problems/participating in online contests on coding sites. At the same time, I built my own library for use in competitions in the following years and update the solutions on GitHub for beginners who want to take a look at them.

  Although it is hard to say whether or not I am already the best now, I have had a few signifincant achievements and some useful resources that I would like to share and that I wish I knew ealier in my freshman year.

  I. Coding sites

Hackerrank

Kattis

LeetCode

  II. Courses

Algo.is - Competitive Programming

Achievements:

| Competition & Awards |

. Dickinson Spring Programming Competition 2017: 3rd Prize
. ICPC-ACM North America Qualifier 2017 (Dickinson College): 1st
. Participants in ICPC-ACM North America Regional Contest 2017

| Online contests |

. Hackerrank Week Of Code 32: Silver medal (4-12% of participants)
. Hackerrank Week Of Code 33: Silver medal (4-12% of participants)
. Hackerrank Week Of Code 34: Gold medal (below 4% of participants)
. Hackerrank HourRank 23: Gold medal (below 4% of participants)
. Hackerrank University CodeSprint 3: Silver medal (4-12% of participants)

| Stats |

. Hackerrank:
99th percentile on Algorithm domain (195 problems solved)
Highest percentile on contest: 99.05
2 gold medals and 3 silver medals
. Kattis:
Rank 1st in Dickinson leaderboard
Rank 22th in Vietnam leaderboard
Rank 382 overall
.Others:
More than 450 problems solved in total
Complete Competitive Programming course with the required problems solved

My Approach to Competitive Programming:

  At first, I found it extremely inefficient to jump into some random problems and find a way to solve them becaues there will be two situations: I cannot solve one and move on to another problem or I look for the solution online and gain nothing from it.

Therefore, here are the steps I would recommend for beginners:

. Start with lecture on data structures and algorithms. You can easily find them on Youtube, Coursera, Algo.is or some popular books about Computer Science

. After each lecture about a specific technique, go to HackerRank or any other sites you want to solve as many problems on that topic that you can. Start with easy ones first and hard ones later (Remember to do some tricky ones because there will be NO straightforward problems in any serious contest!)

. Write down the explanation and a snippet of code in your note/library so that you can refer to it later. Competitions for college students does not limit the amount of material used (as long as it is a hard copy) so building for own library is highly recommended

. Do not look for solution unless you spent a day working on a problem, since solutions are, however, not your own work and you can hardly remember them

. Last but not least, arrange your solution code in the right folders so that when you want to review a topic, you know where to go


My Advice:

  My overall advice to anyone who wants to try Competitive Programming is that although it is fun to be competitive (it really is and that is why I am still in it right now), it is not what you should spend a lot of time on because for Computer Science, there are more important things that you may need to work on. Also, Competitive Programming is not a way to improve your interview performance, so if your goal is merely do well in the interview, you have other resources such as LeetCode and Cracking the Coding Interview book to work on. I do not say that there are no benefits in Competitive Programming because I learnt a lot from it and it was how I taught my self Algorithms without taking any class.

  Moreover, although I do recommend you to follow the steps I wrote about how to approach Competitive Programming, there are some better pathways that I should learn from (because I am not the best yet!). Therefore, do some research, read quora everyday, ask people around you and MAKE EFFORTS!

  If you found any interesting resources, please please please share them with me if possible via chauq@dickinson.edu